See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 23540|Vastuse: 2

[Allikas] Üksikasjalik selgitus mitmest viisist, kuidas lahendada C# programmi probleemi, mis lubab käivitada ainult ühe instantsi

[Kopeeri link]
Postitatud 08.12.2016 13:11:13 | | |

Meetod 1:
Kasuta lõime mutex-muutujaid. Defineeri mutex-muutujad, et määrata, kas eksemplar töötab.
Muuda program.cs faili Main() funktsioon järgmiseks koodiks:




Märkus: Programmis on väide System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); mutex-muutuja loomiseks käivita, kus "single_test" on mutexi nimi, ja kui see meetod tagastatakse, siis kui luuakse lokaalne mutex või määratud nimetussüsteem mutex, on boole'i väärtus runone tõene; vale, kui määratud nimetamissüsteem mutexe juba eksisteerib. Nimega muteksid on kogu süsteemis.
Meetod 2: Kasuta protsessi hindamise meetodit, enne programmi käivitamist leiame, kas protsessis on sama nimega protsess ja kas käivitav asend on samuti sama protsess. Rakenda Process klass System.Diagnostics nimeruumis C#-s, et seda rakendada, põhikood on järgmine:
1. Lisa program.cs faili funktsioon järgmiselt:




2. Muuda peamine () funktsioon järgmiseks koodiks:




Meetod 3: Globaalne aatomimeetod, enne programmi loomist kontrollige esmalt globaalset aatomtabelit, kas on olemas konkreetne aatom A (lisatud loomise ajal), ja lõpetage selle loomine, kui see eksisteerib, mis näitab, et programm on käivitanud instantsi; Kui seda ei eksisteeri, käivita programm ja soovi lisada konkreetne aatom A globaalsesse aatomitabelisse; Programmist väljudes pea meeles vabastada konkreetne aatom A, vastasel juhul ei vabastata seda enne, kui arvuti on välja lülitatud. C# rakendus on järgmine:
1. Deklareeri WinAPI funktsiooniliides

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
avalik staatiline ekstern UInt32 GlobalAddAtom (string lpString); Lisa aatomid
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
avalik staatiline ekstern UInt32 GlobalFindAtom(string lpString); Leia aatomid
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
avalik staatiline ekstern UInt32 GlobalDeleteAtom(UInt32 nAtom); Kustuta aatomid
2. Muuda Main() funktsiooni järgmiselt:




3. Lisa FormClosed üritusele järgmine kood:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Kustuta aatomiline "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Ülaltoodud on üldine idee teineteist välistava programmi loomiseks ning minu arvates on esimene meetod kõige lihtsam.




Eelmine:Erinevus Directory.GetCurrentDirectory ja Application.StartupPath vahel
Järgmine:Erinevus .Net Framework4 ja .Net Framework4.0 kliendiprofiili vahel
Postitatud 10.07.2017 06:31:21 |
Aitäh, et jagasid
 Üürileandja| Postitatud 23.07.2024 14:21:04 |
C# programmid lubavad ainult ühel instantsil õiget koodi käivitada
https://www.itsvse.com/thread-3391-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com