Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 22992|Vastaus: 2

[Lähde] Yksityiskohtainen selitys useista tavoista ratkaista C#-ohjelman ongelma, joka sallii vain yhden instanssin suorittaa

[Kopioi linkki]
Julkaistu 8.12.2016 13.11.13 | | |

Menetelmä 1:
Käytä säikeen mutex-muuttujia. Määrittele mutex-muuttujat selvittämään, käynnissäkö instanssi.
Muuta program.cs-tiedoston Main()-funktio seuraavaan koodiin:




Huomautus: Ohjelmassa lause System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); mutex-muuttujan luomiseksi, jossa "single_test" on mutex-nimi, ja kun tämä menetelmä palautuu, jos luodaan paikallinen mutex tai määritelty nimeämisjärjestelmä mutex, boole-arvo runone on tosi; väärin, jos määritelty nimeämisjärjestelmä mutexe on jo olemassa. Nimetyt mutexit ovat koko järjestelmän laajuisia.
Menetelmä 2: Käytetään prosessin arviointitapaa, ennen kuin suoritamme ohjelman, tarkistamme, onko prosessissa samanniminen prosessi, ja onko myös sama prosessi. Käytä Process-luokkaa System.Diagnostics -nimiavaruudessa C#:ssa toteuttaaksesi sen, pääkoodi on seuraava:
1. Lisää funktio program.cs-tiedostoon seuraavasti:




2. Muuta pääfunktio () seuraavaan koodiin:




Menetelmä 3: Globaali atomimenetelmä, ennen ohjelman luomista tarkista ensin globaali atomitaulukko, onko olemassa tietty atomi A (lisätty luomishetkellä), ja lopeta sen luominen, kun se on olemassa, mikä osoittaa, että ohjelma on suorittanut instanssin; Jos sitä ei ole, suorita ohjelma ja halua lisätä tietty atomi A globaaliin atomitaulukkoon; Kun poistut ohjelmasta, muista vapauttaa tietty atomi A, muuten sitä ei vapauteta ennen kuin tietokone sammutetaan. C#-toteutus on seuraava:
1. Ilmoita WinAPI-funktiorajapinta

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
julkinen staattinen ulkoinen UInt32 GlobalAddAtom (merkkijono, lpString); Lisää atomeja
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
julkinen staattinen ulkoinen UInt32 GlobalFindAtom (merkkijono lpString); Etsi atomeja
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
julkinen staattinen ulkoinen UInt32 GlobalDeleteAtom(UInt32 nAtom); Poista atomit
2. Muokkaa Main()-funktiota seuraavasti:




3. Lisää seuraava koodi FormClosed-tapahtumaan:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Poista atominen "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Yllä oleva on perusidea toisensa poissulkevan ohjelman luomisesta, ja mielestäni ensimmäinen menetelmä on yksinkertaisin.




Edellinen:Ero Directory.GetCurrentDirectoryn ja Application.StartupPathin välillä
Seuraava:Ero .Net Framework4:n ja .Net Framework4.0:n asiakasprofiilin välillä
Julkaistu 10.7.2017 6.31.21 |
Kiitos, että jaoit
 Vuokraisäntä| Julkaistu 23.7.2024 14.21.04 |
C#-ohjelmat sallivat vain yhden instanssin suorittaa oikean koodin
https://www.itsvse.com/thread-3391-1-1.html
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com