Metoda 1: Użyj zmiennych mutex w wątkach. Zdefiniuj zmienne mutex, aby określić, czy dana instancja działa. Zmień funkcję Main() w pliku program.cs na następujący kod:
Uwaga: W programie polecenie System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); Aby utworzyć zmienną mutex, przebiegnij tak, gdzie "single_test" to nazwa mutex, a gdy ta metoda zwraca się, jeśli zostanie utworzony lokalny mutex lub określony system nazewnictwa mutex, wartość boole'a runone jest prawdziwa; nieprawda, jeśli określony system nazewnictwa mutex już istnieje. Nazwane mutexy działają na poziomie całego systemu. Metoda 2: Użyj metody oceny procesu, zanim uruchomimy program, sprawdzamy, czy w procesie jest proces o tej samej nazwie, a pozycja działająca jest również tym samym procesem. Aby ją zaimplementować, zastosuj klasę Process w przestrzeni nazw System.Diagnostics w C#, główny kod wygląda następująco: 1. Dodaj funkcję do pliku program.cs w następujący sposób:
2. Zmień funkcję główną () na następujący kod:
Metoda 3: Globalna metoda atomowa, przed utworzeniem programu najpierw sprawdź globalną tabelę atomową, czy istnieje konkretny atom A (dodany w momencie tworzenia), i zatrzymaj jego tworzenie, gdy istnieje, wskazując, że program uruchomił instancję; Jeśli nie istnieje, uruchom program i chcesz dodać konkretny atom A do globalnej tabeli atomowej; Po wyjściu z programu pamiętaj, aby zwolnić konkretny atom A, w przeciwnym razie nie zostanie on zwolniony, dopóki komputer nie zostanie wyłączony. Implementacja w C# wygląda następująco: 1. Zadeklaruj interfejs funkcji WinAPI
[System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern UInt32 GlobalAddAtom(String lpString); Dodaj atomy [System.Runtime.InteropServices.DllImport("kernel32.dll")] public static extern UInt32 GlobalFindAtom(String lpString); Znajdź atomy [System.Runtime.InteropServices.DllImport("kernel32.dll")] publiczny statyczny zewnętrzny UInt32 GlobalDeleteAtom(UInt32 nAtom); Usuń atomy 2. Zmodyfikuj funkcję Main() w następujący sposób:
3. Dodaj następujący kod do zdarzenia FormClosed: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Usuń atomowe "jiaao_test" --------------------------------------*-------*--------*----------------------------------------------- Powyższe to podstawowa idea tworzenia programu wykluczającego się wzajemnie i osobiście uważam, że pierwsza metoda jest najprostsza. |