Heim > Backend-Entwicklung > C++ > Wie kann ich sicherstellen, dass nur eine Instanz einer WPF -Anwendung gleichzeitig ausgeführt wird?

Wie kann ich sicherstellen, dass nur eine Instanz einer WPF -Anwendung gleichzeitig ausgeführt wird?

Patricia Arquette
Freigeben: 2025-02-02 07:31:09
Original
453 Leute haben es durchsucht

How to Ensure Only One Instance of a WPF Application Runs at a Time?

Implementierung von Einzelinstanzverhalten in WPF-Anwendungen

In diesem Handbuch wird erläutert, wie eine WPF -Anwendung erstellt wird, mit der nur eine Instanz gleichzeitig ausgeführt wird. Dies wird unter Verwendung von Mutexes erreicht.

Verständnis von Mutexes

a mutex (gegenseitiger Ausschluss) ist eine Synchronisationsprimitive. Es stellt sicher, dass nur ein einzelner Prozess zu einem bestimmten Zeitpunkt auf eine gemeinsame Ressource zugreifen kann. In WPF nutzen wir Mutexes, um zu verhindern, dass mehrere Anwendungsinstanzen gleichzeitig ausgeführt werden.

Implementierungsdetails

Verwenden Sie namens Mutexes:

Die bevorzugte Methode beinhaltet das Erstellen eines benannten Mutex in den Haupteintrittspunkt Ihrer Anwendung:

static class Program
{
    static Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
    // ...
}
Nach dem Login kopieren

Namens Mutexes ermöglichen die Synchronisation über mehrere Prozesse und Threads hinweg.

Erfassen Sie den Mutex:

Um festzustellen, ob eine andere Instanz bereits ausgeführt wird, verwenden wir die WaitOne -Methode:

if (mutex.WaitOne(TimeSpan.Zero, true))
{
    // Mutex acquired; application can start
    Application.Run(new MainWindow());
    mutex.ReleaseMutex();
}
else
{
    // Mutex unavailable; another instance is active
    MessageBox.Show("An instance is already running.");
}
Nach dem Login kopieren

Optional: Benachrichtigen Sie die vorhandene Instanz:

Für erweiterte Benutzererfahrung können Sie die laufende Instanz benachrichtigen, wenn ein neuer Start versucht wird. Dies geschieht mit PostMessage:

if (!mutex.WaitOne(TimeSpan.Zero, true))
{
    NativeMethods.PostMessage(
        (IntPtr)NativeMethods.HWND_BROADCAST,
        NativeMethods.WM_SHOWME,
        IntPtr.Zero,
        IntPtr.Zero);
}
Nach dem Login kopieren

Umgang mit der benutzerdefinierten Win32 -Nachricht:

In Ihrem Hauptfenster überschreiben WndProc, um die benutzerdefinierte Nachricht zu hören und das vorhandene Fenster in den Vordergrund zu bringen:

protected override void WndProc(ref Message m)
{
    if (m.Msg == NativeMethods.WM_SHOWME)
    {
        Activate(); // Bring to front
    }
    base.WndProc(ref m);
}
Nach dem Login kopieren

Dieser umfassende Ansatz gewährleistet eine robuste WPF-Anwendung mit einer einzigen Instanz, wodurch mehrere Instanzen gleichzeitig ausgeführt werden. Denken Sie daran, die erforderlichen NativeMethods Definitionen einzuschließen (hier nicht für Kürze).

Das obige ist der detaillierte Inhalt vonWie kann ich sicherstellen, dass nur eine Instanz einer WPF -Anwendung gleichzeitig ausgeführt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage