Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 22992|Antwort: 2

[Quelle] Detaillierte Erklärung mehrerer Möglichkeiten, das Problem eines C#-Programms zu lösen, das nur eine Instanz ausführen lässt.

[Link kopieren]
Veröffentlicht am 08.12.2016 13:11:13 | | |

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.




Vorhergehend:Unterschied zwischen Directory.GetCurrentDirectory und Application.StartupPath
Nächster:Der Unterschied zwischen .Net Framework4 und .Net Framework4.0 Client-Profil
Veröffentlicht am 10.07.2017 06:31:21 |
Danke fürs Teilen
 Vermieter| Veröffentlicht am 23.07.2024 14:21:04 |
C#-Programme erlauben nur einer Instanz, den korrekten Code auszuführen
https://www.itsvse.com/thread-3391-1-1.html
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com