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. |