Maison >développement back-end >C++ >Comment garantir qu'une seule instance d'une application WPF s'exécute à la fois?
Ce guide explique comment créer une application WPF qui ne permet qu'une seule instance d'exécuter simultanément. Ceci est réalisé en utilisant des mutex.
Un mutex (exclusion mutuelle) est une primitive de synchronisation. Il garantit qu'un seul processus peut accéder à une ressource partagée à un moment donné. Dans WPF, nous tirons partis de mutex pour empêcher plusieurs instances d'application de s'exécuter simultanément.
en utilisant des mutexes nommés:
La méthode préférée consiste à créer un mutex nommé dans le point d'entrée principal de votre application:
<code class="language-csharp">static class Program { static Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}"); // ... }</code>
Les mutex nommés permettent la synchronisation sur plusieurs processus et threads.
Acquérir le mutex:
Pour déterminer si une autre instance est déjà en cours d'exécution, nous utilisons la méthode WaitOne
:
<code class="language-csharp">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."); }</code>
Facultatif: notification de l'instance existante:
Pour une expérience utilisateur améliorée, vous pouvez informer l'instance en cours d'exécution lorsqu'un nouveau lancement est tenté. Cela se fait en utilisant PostMessage
:
<code class="language-csharp">if (!mutex.WaitOne(TimeSpan.Zero, true)) { NativeMethods.PostMessage( (IntPtr)NativeMethods.HWND_BROADCAST, NativeMethods.WM_SHOWME, IntPtr.Zero, IntPtr.Zero); }</code>
Gestion du message Win32 personnalisé:
Dans votre fenêtre principale, remplacez WndProc
pour écouter le message personnalisé et apporter la fenêtre existante au premier plan:
<code class="language-csharp">protected override void WndProc(ref Message m) { if (m.Msg == NativeMethods.WM_SHOWME) { Activate(); // Bring to front } base.WndProc(ref m); }</code>
Cette approche complète garantit une application WPF à instance unique robuste, empêchant plusieurs instances de s'exécuter simultanément. N'oubliez pas d'inclure les définitions NativeMethods
nécessaires (non montrées ici pour la concision).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!