Veröffentlicht 8. Dezember 20204 j Hallo zusammen Ich habe in meiner Anwendung die ich geschrieben habe diese Code in App.Xaml.cs hinzugefügt um ihn nur einmal Starten lassen leider Erfolglos. habt Ihr eine andere Lösung o. was mache ich hier Falsch? Danke für die Antworten using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Drawing; using System.Linq; using System.Threading.Tasks; using System.Threading; using System.Windows; namespace TimeRecorderPro { /// <summary> /// Interaktionslogik für "App.xaml" /// </summary> /// public partial class App : Application { private Mutex mutex = null; //protected override void OnStartup(StartupEventArgs e) protected override void OnStartup(StartupEventArgs e) { bool createdNew; //Mutex mit eindeutigem Namen (bspw. GUID) mutex = new Mutex(true, "77aca664-ba25-4964-bc05-d7ba57030720", out createdNew); if(!mutex.WaitOne(TimeSpan.Zero, true)) //Prüfung, ob Mutex schon länger aktiv ist.. { //Mutex ist gerade gestartet.. base.OnStartup(e); } else { ////Mutex läuft bereits längere Zeit.. MessageBox.Show("Anwendung läuft bereits!"); ////Anwendung beenden Environment.Exit(0); } } } }
8. Dezember 20204 j Auch: Welche .NET Version, was sagt die Ausgabe, wird ne Exception geworfen? Edit: ganz vergessen, dass ich schon was gepostet habe, sry Doppelpost. Habe mal das mit .NET 5 von dir kopiert und es wir kein Fehler so geworfen Bearbeitet 8. Dezember 20204 j von KeeperOfCoffee
8. Dezember 20204 j vor 1 Stunde schrieb KeeperOfCoffee: Habe mal das mit .NET 5 von dir kopiert und es wir kein Fehler so geworfen Kann ich nicht nachvollziehen. Bei mir geht er immer in den else-Zweig. Für mich macht der Code auch überhaupt keinen Sinn, der WaitHandle, der mit WaitOne() aufgerufen wird, wartet auf ein Signal, was aber nie kommen wird, da nie ein Signal geschickt wird. Es reicht, wenn man einfach createdNew abfragt. public partial class App : Application { private Mutex mutex; protected override void OnStartup(StartupEventArgs e) { mutex = new Mutex(true, "MyMutex", out bool createdNew); if(!createdNew) { MessageBox.Show("Anwendung läuft bereits!"); Environment.Exit(0); } base.OnStartup(e); } }
8. Dezember 20204 j Ich habe ja schon lange nichts mehr mit Mutex gemacht, aber muss dieser nicht disposed, geschlossen, released whatever werden, damit eine https://docs.microsoft.com/de-de/dotnet/api/system.threading.abandonedmutexexception?view=net-5.0 nicht verursacht wird? Oder passiert das einfach, wenn das Programm wieder geschlossen wird? Zitat Kann ich nicht nachvollziehen. Bei mir geht er immer in den else-Zweig. Ich habs nur auf .NET Fiddle getestet mit ner Consolenanwendung. Kann nicht für jede Sache im Forum ein Wegwerfprojekt starten. Hat bei .NET 4.8 gemeckert, bei .NET 5 nicht. Deswegen habe ich ja gefragt, was der TimeSpan.Zero soll und ob es ne Exception gibt. Der TE schreibt ja fast keine Infos. Bearbeitet 8. Dezember 20204 j von KeeperOfCoffee
8. Dezember 20204 j Sieht so aus, dass er automatisch geschlossen wird, wenn kein Prozess mehr ein Handle drauf hat.
14. Dezember 20204 j Autor Sorry , ja stimmt hab wenig infos geschrieben, Whiz-zard hast du recht der Programmhatte Automatisch geschlossen letztendlich habe andere Lösung dafür genommen. Danke für die Antworten
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.