Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 22992|Odgovoriti: 2

[Vir] Podrobna razlaga več načinov reševanja problema C# programa, ki omogoča izvajanje le ene instance

[Kopiraj povezavo]
Objavljeno na 8. 12. 2016 13:11:13 | | |

Metoda 1:
Uporabi spremenljivke Thread Mutex. Določite mutex spremenljivke, da ugotovite, ali se instanca izvaja.
Spremenite funkcijo Main() v program.cs datoteki v naslednjo kodo:




Opomba: V programu je ukaz System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); za ustvarjanje mutex spremenljivke se izvede, kjer je "single_test" ime mutex, in ko se ta metoda vrne, če je ustvarjen lokalni mutex ali določen sistem poimenovanja mutex, je booleova vrednost runone resnična; napačno, če že obstaja določeni sistem poimenovanja mutexe. Poimenovani muteksi so sistemski.
Metoda 2: Uporabite način ocenjevanja procesa, preden zaženemo program, ugotovimo, ali je v procesu proces z enakim imenom in ali je položaj v teku tudi isti proces. Za implementacijo uporabite razred Process v imenskem prostoru System.Diagnostics v C#, glavna koda je naslednja:
1. Dodajte funkcijo v program.cs datoteko na naslednji način:




2. Spremenite funkcijo Main () v naslednjo kodo:




Metoda 3: Globalna atomska metoda, preden ustvariš program, najprej preveri globalno atomsko tabelo, ali obstaja določen atom A (dodan ob ustvarjanju), in prenehaj ustvarjati, ko obstaja, kar pomeni, da je program zagnal instanco; Če ne obstaja, zaženite program in želite dodati določen atom A v globalno atomsko tabelo; Ko zapuščate program, ne pozabite sprostiti določenega atoma A, sicer se ne bo sprostil, dokler računalnik ne bo izklopljen. Implementacija v C# je naslednja:
1. Deklarirajte funkcijski vmesnik WinAPI

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
javni statični zunanji UInt32 GlobalAddAtom(String lpString); Dodaj atome
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
javni statični zunanji UInt32 GlobalFindAtom(String lpString); Najdi atome
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
javni statični zunanji UInt32 GlobalDeleteAtom(UInt32 nAtom); Izbriši atome
2. Spremenite funkcijo Main() na naslednji način:




3. Dodajte naslednjo kodo k dogodku FormClosed:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Izbriši atomski "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Zgoraj navedeno je osnovna splošna ideja ustvarjanja medsebojno izključujočega programa, in osebno menim, da je prva metoda najpreprostejša.




Prejšnji:Razlika med Directory.GetCurrentDirectory in Application.StartupPath
Naslednji:Razlika med profiloma odjemalca .Net Framework4 in .Net Framework4.0
Objavljeno na 10. 07. 2017 06:31:21 |
Hvala, ker si delil
 Najemodajalec| Objavljeno na 23. 07. 2024 14:21:04 |
C# programi dovoljujejo le enemu primeru, da zažene pravilno kodo
https://www.itsvse.com/thread-3391-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com