Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 22992|Risposta: 2

[Fonte] Spiegazione dettagliata di diversi modi per risolvere il problema di un programma C# che permette di eseguire una sola istanza

[Copiato link]
Pubblicato su 08/12/2016 13:11:13 | | |

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.




Precedente:Differenza tra Directory.GetCurrentDirectory e Application.StartupPath
Prossimo:La differenza tra il profilo client .Net Framework4 e .Net Framework4.0
Pubblicato su 10/07/2017 06:31:21 |
Grazie per aver condiviso
 Padrone di casa| Pubblicato su 23/07/2024 14:21:04 |
I programmi C# permettono a una sola istanza di eseguire il codice corretto
https://www.itsvse.com/thread-3391-1-1.html
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com