Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 22992|Svar: 2

[Källa] Detaljerad förklaring av flera sätt att lösa problemet med ett C#-program som bara tillåter en instans att köras

[Kopiera länk]
Publicerad på 2016-12-08 13:11:13 | | |

Metod 1:
Använd trådmutexvariabler. Definiera mutexvariabler för att avgöra om en instans körs.
Ändra Main()-funktionen i program.cs-filen till följande kod:




Notera: I programmet kör uttrycket System.Threading.Mutex = new System.Threading.Mutex (true, "single_test", out runone); för att skapa en mutexvariabel kör, där "single_test" är mutexnamnet, och när denna metod returneras, om en lokal mutex eller ett specificerat namngivningssystem skapas, är det booleska värdet runone sant; falskt om det specificerade namngivningssystemet redan existerar. Namngivna mutexar är systemtäckande.
Metod 2: Använd metoden att bedöma processen, innan vi kör programmet, tar vi reda på om det finns en process med samma namn i processen, och att den körande positionen också är samma process. Applicera klassen Process i namnrymden System.Diagnostics i C# för att implementera den, huvudkoden är följande:
1. Lägg till en funktion i program.cs filen enligt följande:




2. Byt huvudfunktionen () till följande kod:




Metod 3: Global atomär metod, innan du skapar ett program, kontrollera först den globala atomtabellen för att se om det finns en specifik atom A (tillagd vid skapandetillfället), och sluta skapa den när den finns, vilket indikerar att programmet har kört en instans; Om den inte finns, kör programmet och vill lägga till en specifik atom A i den globala atomtabellen; När du avslutar programmet, kom ihåg att släppa en specifik atom A, annars släpps den inte förrän datorn stängs av. C#-implementeringen är följande:
1. Deklarera WinAPI-funktionsgränssnittet

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statisk extern UInt32 GlobalAddAtom (Sträng lpString); Lägg till atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statisk extern UInt32 GlobalFindAtom (sträng lpString); Hitta atomer
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
publik statisk extern UInt32 GlobalDeleteAtom(UInt32 nAtom); Ta bort atomer
2. Modifiera Main()-funktionen enligt följande:




3. Lägg till följande kod i FormClosed-händelsen:
GlobalDeleteAtom(GlobalFindAtom ("jiaao_test")); Radera atomära "jiaao_test"
--------------------------------------*-------*--------*-----------------------------------------------
Ovanstående är den grundläggande allmänna idén om att skapa ett ömsesidigt uteslutande program, och jag tycker personligen att den första metoden är den enklaste.




Föregående:Skillnad mellan Directory.GetCurrentDirectory och Application.StartupPath
Nästa:Skillnaden mellan .Net Framework4 och .Net Framework4.0 klientprofil
Publicerad på 2017-07-10 06:31:21 |
Tack för att du delade med dig
 Hyresvärd| Publicerad på 2024-07-23 14:21:04 |
C#-program tillåter bara en instans att köra korrekt kod
https://www.itsvse.com/thread-3391-1-1.html
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com