Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

        }
    }
}

 

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

 

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

  • 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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.