Quelle est la bonne methode pour creer une application WPF a instance unique ?

Quelle est la bonne methode pour creer une application WPF a instance unique ?


Source : Stack Overflow [.net]

Voici un tres bon article concernant la solution avec Mutex. L’approche decrite dans l’article est avantageuse pour deux raisons.

Premierement, elle ne necessite pas de dependance a l’assembly Microsoft.VisualBasic. Si notre projet avait deja une dependance a cet assembly, nous preconiserions probablement l’approche montree dans une autre reponse. Mais en l’etat, nous n’utilisons pas l’assembly Microsoft.VisualBasic, et nous preferons ne pas ajouter de dependance inutile a notre projet.

Deuxiemement, l’article montre comment ramener l’instance existante de l’application au premier plan lorsque l’utilisateur essaie de demarrer une autre instance. C’est une fonctionnalite tres appreciable que les autres solutions Mutex decrites ici n’abordent pas.

MISE A JOUR

Au 1er aout 2014, l’article que nous avons mentionne est toujours actif, mais le blog n’a pas ete mis a jour depuis un moment. Cela nous preoccupe qu’il puisse eventuellement disparaitre, et avec lui, la solution preconisee. Nous reproduisons le contenu de l’article ici pour la posterite. Les mots appartiennent uniquement au proprietaire du blog Sanity Free Coding.

Aujourd’hui, nous voulions refactoriser du code qui empechait notre application de s’executer en plusieurs instances.

Precedemment, nous avions utilise System.Diagnostics.Process pour rechercher une instance de notre myapp.exe dans la liste des processus. Bien que cela fonctionne, cela engendre beaucoup de surcharge, et nous voulions quelque chose de plus propre.

Sachant que nous pouvions utiliser un mutex pour cela (mais ne l’ayant jamais fait auparavant), nous avons entrepris de reduire notre code et de simplifier notre quotidien.

Dans la classe main de notre application, nous avons cree un Mutex nomme statique :

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

(Reponse tronquee)