Maison > développement back-end > C++ > Comment garantir qu'une seule instance d'une application WPF s'exécute à la fois?

Comment garantir qu'une seule instance d'une application WPF s'exécute à la fois?

Patricia Arquette
Libérer: 2025-02-02 07:31:09
original
451 Les gens l'ont consulté

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

Implémentation de comportement à instance unique dans les applications WPF

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.

Comprendre les mutexes

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.

Détails d'implémentation

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:

static class Program
{
    static Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");
    // ...
}
Copier après la connexion

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:

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.");
}
Copier après la connexion

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:

if (!mutex.WaitOne(TimeSpan.Zero, true))
{
    NativeMethods.PostMessage(
        (IntPtr)NativeMethods.HWND_BROADCAST,
        NativeMethods.WM_SHOWME,
        IntPtr.Zero,
        IntPtr.Zero);
}
Copier après la connexion

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:

protected override void WndProc(ref Message m)
{
    if (m.Msg == NativeMethods.WM_SHOWME)
    {
        Activate(); // Bring to front
    }
    base.WndProc(ref m);
}
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal