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.
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.
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}"); // ... }
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."); }
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); }
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); }
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!