Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 22992|Svar: 2

[Kilde] Detaljeret forklaring af flere måder at løse problemet med et C#-program, der kun tillader én instans at køre

[Kopier link]
Opslået på 08/12/2016 13.11.13 | | |

Metode 1:
Brug trådmutex-variabler. Definér mutex-variabler for at afgøre, om en instans kører.
Ændr Main()-funktionen i program.cs-filen til følgende kode:




Bemærk: I programmet kører sætningen System.Threading.Mutex = ny System.Threading.Mutex (true, "single_test", ud runone); for at oprette en mutexvariabel kør, hvor "single_test" er mutex-navnet, og når denne metode returneres, hvis en lokal mutex eller et specificeret navngivningssystem oprettes, er boolean-værdien runone sand; falsk, hvis det specificerede navngivningssystem-mutexe allerede eksisterer. Navngivne mutexer er systemdækkende.
Metode 2: Brug metoden til at bedømme processen, før vi kører programmet, finder vi ud af, om der er en proces med samme navn i processen, og om kørende position også er den samme proces. Anvend Process-klassen i System.Diagnostics-navnerummet i C# for at implementere den, hovedkoden er som følger:
1. Tilføj en funktion til program.cs filen som følger:




2. Ændre hovedfunktionen () til følgende kode:




Metode 3: Global atomar metode, før du opretter et program, tjek først den globale atomare tabel for at se, om der er et specifikt atom A (tilføjet ved oprettelsen), og stop oprettelsen af det, når det eksisterer, hvilket indikerer, at programmet har kørt en instans; Hvis den ikke findes, kør programmet og vil tilføje et specifikt atom A til den globale atomtabel; Når du afslutter programmet, skal du huske at frigive et specifikt atom A, ellers bliver det ikke frigivet, før computeren er slukket. C#-implementeringen er som følger:
1. Deklarer WinAPI-funktionsgrænsefladen

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalAddAtom (streng lpString); Tilføj atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalFindAtom (Streng lpString); Find atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalDeleteAtom(UInt32 nAtom); Slet atomer
2. Ændr Main()-funktionen som følger:




3. Tilføj følgende kode til FormClosed-begivenheden:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Slet atomar "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Ovenstående er den grundlæggende generelle idé om at skabe et gensidigt udelukkende program, og jeg mener personligt, at den første metode er den simpleste.




Tidligere:Forskellen mellem Directory.GetCurrentDirectory og Application.StartupPath
Næste:Forskellen mellem .Net Framework4 og .Net Framework4.0 klientprofil
Opslået på 10/07/2017 06.31.21 |
Tak fordi du delte
 Udlejer| Opslået på 23/07/2024 14.21.04 |
C#-programmer tillader kun én instans at køre den korrekte kode
https://www.itsvse.com/thread-3391-1-1.html
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com