Methode 1: Verwende Thread-Mutex-Variablen. Definiere mutexvariable, um zu bestimmen, ob eine Instanz läuft. Ändere die Funktion Main() in der program.cs-Datei in folgenden Code:
Hinweis: Im Programm gilt die Anweisung System.Threading.Mutex run = new System.Threading.Mutex (true, "single_test", out runone); um eine Mutex-Variable zu erstellen, wobei "single_test" der Mutex-Name ist, und wenn diese Methode zurückgegeben wird, ist bei der Erstellung eines lokalen Mutex oder eines spezifizierten Namenssystems der boolesche Wert runone wahr; falsch, wenn das spezifizierte Namenssystem-Mutex bereits existiert. Benannte Mutexe sind systemweit. Methode 2: Verwenden Sie die Beurteilung des Prozesses, bevor wir das Programm ausführen, um festzustellen, ob es einen Prozess mit demselben Namen im Prozess gibt und ob die laufende Position ebenfalls derselbe ist. Wenden Sie die Class-Process im System.Diagnostics-Namensraum in C# an, um sie zu implementieren, der Hauptcode ist wie folgt: 1. Fügen Sie der program.cs-Datei folgende Funktion hinzu:
2. Ändere die Hauptfunktion () in folgenden Code:
Methode 3: Globale atomare Methode: Vor der Erstellung eines Programms wird zuerst die globale Atomtabelle überprüft, ob ein bestimmtes Atom A vorhanden ist (das zum Zeitpunkt der Erstellung hinzugefügt wurde), und stoppt die Erstellung, sobald es existiert, was darauf hinweist, dass das Programm eine Instanz ausgeführt hat; Wenn sie nicht existiert, führe das Programm aus und möchte ein bestimmtes Atom A zur globalen Atomtabelle hinzufügen; Beim Beenden des Programms sollten Sie daran denken, ein bestimmtes Atom A freizugeben, andernfalls wird es erst freigegeben, wenn der Computer ausgeschaltet wird. Die C#-Implementierung ist wie folgt: 1. Deklarieren Sie die WinAPI-Funktionsschnittstelle
[System.Runtime.InteropServices.DllImport("kernel32.dll")] öffentlicher statischer externer UInt32 GlobalAddAtom (String lpString); Atome hinzufügen [System.Runtime.InteropServices.DllImport("kernel32.dll")] öffentliche statische externe UInt32 GlobalFindAtom (String lpString); Finde Atome [System.Runtime.InteropServices.DllImport("kernel32.dll")] öffentlicher statischer externer UInt32 GlobalDeleteAtom (UInt32 nAtom); Atome löschen 2. Ändern Sie die Main()-Funktion wie folgt:
3. Fügen Sie den folgenden Code zum FormClosed-Event hinzu: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Lösche atomare "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Das oben Genannte ist die grundlegende Grundidee, ein sich gegenseitig ausschließendes Programm zu erstellen, und ich persönlich denke, dass die erste Methode die einfachste ist. |