Methode 1: Gebruik thread-mutexvariabelen. Definieer mutexvariabelen om te bepalen of een instantie draait. Verander de Main()-functie in het program.cs-bestand naar de volgende code:
Opmerking: In het programma wordt de instructie System.Threading.Mutex uitgevoerd = nieuwe System.Threading.Mutex (true, "single_test", out runone); om een mutexvariabele te maken, voer uit, waarbij "single_test" de mutexnaam is, en wanneer deze methode terugkeert, als een lokale mutex of een gespecificeerd naamgevingssysteem wordt aangemaakt, is de booleaanse waarde runone waar; onwaar als het gespecificeerde naamgevingssysteem al bestaat. Benoemde mutexen zijn systeembreed. Methode 2: Gebruik de methode om het proces te beoordelen, voordat we het programma uitvoeren, kijken we of er een proces met dezelfde naam in het proces zit, en dat de looppositie ook hetzelfde proces is. Pas de Process-klasse toe in de naamruimte System.Diagnostics in C# om deze te implementeren, de hoofdcode is als volgt: 1. Voeg een functie toe aan het program.cs bestand als volgt:
2. Verander de Main () functie naar de volgende code:
Methode 3: Globale atomaire methode, voordat je een programma maakt, controleer eerst de globale atomaire tabel om te zien of er een specifiek atoom A is (toegevoegd bij het maken van het programma), en stop het aanmaken wanneer het bestaat, wat aangeeft dat het programma een instantie heeft uitgevoerd; Als het niet bestaat, start dan het programma en wil je een specifiek atoom A toevoegen aan de globale atoomtabel; Vergeet bij het afsluiten van het programma een specifiek atoom A vrij te laten, anders wordt het pas vrijgegeven als de computer is uitgeschakeld. De C#-implementatie is als volgt: 1. Declareer de WinAPI-functieinterface
[System.Runtime.InteropServices.DllImport("kernel32.dll")] publieke statische externe UInt32 GlobalAddAtom(String lpString); Voeg atomen toe [System.Runtime.InteropServices.DllImport("kernel32.dll")] publieke statische externe UInt32 GlobalFindAtom(String lpString); Vind atomen [System.Runtime.InteropServices.DllImport("kernel32.dll")] publieke statische externe UInt32 GlobalDeleteAtom(UInt32 nAtom); Verwijder atomen 2. Pas de Main()-functie als volgt aan:
3. Voeg de volgende code toe aan het FormClosed-evenement: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Verwijder atomaire "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Bovenstaande is het basisidee van het creëren van een wederzijds exclusief programma, en ik denk persoonlijk dat de eerste methode de eenvoudigste is. |