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

Ansehen: 24385|Antwort: 4

[Quelle] C#-Programme erlauben nur einer Instanz, den korrekten Code auszuführen

[Link kopieren]
Veröffentlicht am 10.12.2016 14:55:50 | | | |


Ich habe eine Verkehrsüberwachungssoftware geschrieben, die der Computer nur einmal ausführen soll, und der Code lautet wie folgt:



Finde, klicke sofort auf die Software, es wird angezeigt: "Eine Instanz wurde ausgeführt", aber,Nach 30 Sekunden Warten und dann auf die Software klicken, läuft es wieder erfolgreichEinmal!!

Es ist schade.Der obige Code ist im DEBUG-Modus in Ordnung, aber in RELEASE funktioniert er nicht.
Das Problem ist, dass Mutex als lokale Variable deklariert ist und aufgrund von Optimierungsproblemen im Relese-Modus ist, möglicherweise weil der Compiler glaubt, Mutex werde nicht mehr verwendet

benutzt, recycelt, von mir selbst getestet,

Leg Mutex oben drauf und setze es als statische Variable auf !!RechtsDer Code lautet wie folgt:





Punktzahl

Anzahl der Teilnehmer1MB+1 beitragen+1 Zusammenbruch Grund
Ein kleiner Anfänger, der gerne lernt + 1 + 1 Wie eine!

Alle Bewertungen sehen





Vorhergehend:C# erlaubt nur die korrekte Ausführung einer Instanz der Anwendung
Nächster:Wie man Software-Boot-Automaten einrichtet.
 Vermieter| Veröffentlicht am 10.12.2016 15:02:58 |
Statische Felder werden vom GC nicht recycelt, statische Felder werden im Loader-Heap, einem Nicht-GC-Heap, zugewiesen und nicht vom GC kontrolliert.

Statische Mitglieder (von statischen Klassen oder nicht) werden nur recycelt, wenn sie AppDomain.Unload erreichen. Statische Klassen dürfen nur statische Mitglieder haben
Veröffentlicht am 06.12.2017 11:48:05 |
Gelernt, danke fürs Teilen
 Vermieter| Veröffentlicht am 23.02.2018 14:59:01 |
Weitere Implementierungen:

Startmethode:



 Vermieter| Veröffentlicht am 03.10.2025 16:10:11 |
.NET/C# implementiert das Programm Singleton basierend auf Mutex und MemoryMappedFile
https://www.itsvse.com/thread-10808-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