Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 19013|Răspunde: 0

[Sursă] C# permite rularea corectă a unei singure instanțe a aplicației

[Copiază linkul]
Postat pe 10.12.2016 14:35:34 | | |
Programele C# permit doar o singură instanță să ruleze codul corect
http://www.itsvse.com/thread-3391-1-1.html
(Sursa: Arhitect)


Codul de mai jos este și el greșit!! Codul corect de mai sus!!


Uneori trebuie să permitem rularea unei singure instanțe a aplicației, iar când procesul începe, dacă descoperă că o instanță a aplicației rulează, se va opri automat. De obicei o implementăm în funcția Main, folosind un mutex Mutex, care este de obicei scris:

Când căutăm răspunsuri, adesea venim și plecăm în grabă, ignorând caracteristicile și precauțiile Mutex. După un test simplu, OK, fă-l și folosește-l. În acest moment, trecem cu vederea o condiție importantă:Convențiile de denumire Mutex. Metoda de scriere de mai sus funcționează fără probleme sub un singur utilizator; În modul multi-utilizator, fiecare utilizator poate începe o instanță, deci o singură instanță nu poate fi garantată.

Dacă trebuie să-l folosești pe un server de terminal și permiți doar o singură instanță, folosește următoarea metodă:


Iată descrierea MSDN:


Pe serverele care rulează servicii terminale, mutex-ul de sistem denumit poate avea două niveluri de vizibilitate. Dacă numele începe cu prefixul "Global\", mutex-ul este vizibil în toate sesiunile serverului terminal. Dacă numele începe cu prefixul "Local\", mutex-ul este vizibil doar în sesiunea serverului terminal care l-a creat. În acest caz, fiecare altă sesiune de server terminal de pe server poate avea un mutex separat cu același nume. Dacă creezi un mutex numit fără a specifica un prefix, acesta va prelua prefixul "Local\". Într-o sesiune de server de terminal, două mutex-uri cu prefixe de nume diferite sunt mutex independente, iar cele două mutex sunt vizibile pentru toate procesele din sesiunea serverului de terminal. Adică, prefixele "Global" și "Local" descriu intervalul numelui mutex în raport cu sesiunea serverului terminal, nu față de proces.






Precedent:Înregistrarea componentelor pentru interoperabilitatea COM este estompată
Următor:Programele C# permit doar o singură instanță să ruleze codul corect
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com