Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 22992|Svare: 2

[Kilde] Detaljert forklaring av flere måter å løse problemet med et C#-program som bare tillater én instans å kjøre

[Kopier lenke]
Publisert på 08.12.2016 13:11:13 | | |

Metode 1:
Bruk trådmutex-variabler. Definer mutexvariabler for å avgjøre om en instans kjører.
Endre Main()-funksjonen i program.cs-filen til følgende kode:




Merk: I programmet kjører setningen System.Threading.Mutex = ny System.Threading.Mutex (true, "single_test", out runone); for å lage en mutexvariabel kjør, hvor "single_test" er mutex-navnet, og når denne metoden returneres, hvis en lokal mutex eller et spesifisert navnesystem mutex opprettes, er boolean-verdien runone sann; falsk hvis det spesifiserte navnesystemet allerede eksisterer. Navngitte mutexer er systemomfattende.
Metode 2: Bruk metoden for å vurdere prosessen, før vi kjører programmet, finner vi ut om det finnes en prosess med samme navn i prosessen, og kjøreposisjonen er også den samme prosessen. Bruk Process-klassen i System.Diagnostics-navnerommet i C# for å implementere den, hovedkoden er som følger:
1. Legg til en funksjon i program.cs-filen som følger:




2. Endre Main ()-funksjonen til følgende kode:




Metode 3: Global atomær metode, før du oppretter et program, sjekk først den globale atomtabellen for å se om det finnes et spesifikt atom A (lagt til ved opprettelse), og stopp opprettelsen når det eksisterer, noe som indikerer at programmet har kjørt en instans; Hvis den ikke finnes, kjør programmet og vil legge til et spesifikt atom A i den globale atomtabellen; Når du avslutter programmet, husk å slippe et spesifikt atom A, ellers slippes det ikke før datamaskinen er slått av. C#-implementeringen er som følger:
1. Deklarer WinAPI-funksjonsgrensesnittet

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalAddAtom (streng lpString); Legg til atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalFindAtom (streng lpString); Finn atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
offentlig statisk ekstern UInt32 GlobalDeleteAtom (UInt32 nAtom); Slett atomer
2. Modifiser Main()-funksjonen som følger:




3. Legg til følgende kode i FormClosed-hendelsen:
GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Slett atomisk "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Ovenstående er den grunnleggende generelle ideen om å lage et gjensidig utelukkende program, og jeg personlig mener at den første metoden er den enkleste.




Foregående:Forskjellen mellom Directory.GetCurrentDirectory og Application.StartupPath
Neste:Forskjellen mellom .Net Framework4 og .Net Framework4.0 klientprofil
Publisert på 10.07.2017 06:31:21 |
Takk for at du delte
 Vert| Publisert på 23.07.2024 14:21:04 |
C#-programmer tillater bare én instans å kjøre riktig kode
https://www.itsvse.com/thread-3391-1-1.html
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com