Metodo 1: Usa variabili mutex thread. Definisci variabili mutex per determinare se un'istanza è in esecuzione. Cambia la funzione Main() nel file program.cs con il seguente codice:
Nota: Nel programma, l'istruzione System.Threading.Mutex run = new System.Threading.Mutex(true, "single_test", out runone); Per creare una variabile mutex, esegui, dove "single_test" è il nome mutex, e quando questo metodo ritorna, se viene creato un mutex locale o un sistema di denominazione specificato mutex, il valore booleano runone è vero; false se il sistema di denominazione specificato mutexe esiste già. I mutex nominati sono a livello di sistema. Metodo 2: Usare il modo di giudicare il processo: prima di eseguire il programma, troviamo se c'è un processo con lo stesso nome nel processo, e la posizione in esecuzione è anch'essa la stessa del processo. Applica la classe Process nello spazio nominale System.Diagnostics in C# per implementarla, il codice principale è il seguente: 1. Aggiungere una funzione al file program.cs come segue:
2. Cambia la funzione principale () con il seguente codice:
Metodo 3: Metodo atomico globale, prima di creare un programma, controlla prima la tabella atomica globale per vedere se esiste un atomo A specifico (aggiunto al momento della creazione) e smetti di crearlo quando esiste, indicando che il programma ha eseguito un'istanza; Se non esiste, esegui il programma e vuoi aggiungere un atomo A specifico alla tabella atomica globale; Quando si esce dal programma, ricorda di rilasciare un atomo specifico A, altrimenti non verrà rilasciato finché il computer non sarà spento. L'implementazione di C# è la seguente: 1. Dichiarare l'interfaccia funzione WinAPI
[System.Runtime.InteropServices.DllImport("kernel32.dll")] esterno statico pubblico UInt32 GlobalAddAtom(Stringa LPString); Aggiungi atomi [System.Runtime.InteropServices.DllImport("kernel32.dll")] esterno statico pubblico UInt32 GlobalFindAtom(stringa lpString); Trova gli atomi [System.Runtime.InteropServices.DllImport("kernel32.dll")] esterno statico pubblico UInt32 GlobalDeleteAtom(UInt32 nAtom); Eliminare atomi 2. Modificare la funzione Main() come segue:
3. Aggiungi il seguente codice all'evento FormClosed: GlobalDeleteAtom(GlobalFindAtom("jiaao_test")); Elimina la "jiaao_test" atomica. --------------------------------------*-------*--------*----------------------------------------------- Quanto sopra è l'idea generale di base per creare un programma mutuamente esclusivo, e personalmente penso che il primo metodo sia il più semplice. |