Zum Inhalt springen

Der Anwendung nur einmal Starten lassen in wpf mit c#


MMazi

Empfohlene Beiträge

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);
            }

        }
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

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);
  }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von KeeperOfCoffee
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...