2011-01-06 3 views
7

J'ai écrit une petite application WPF qui, lorsqu'elle est 'fermée', minimise la barre d'état système (exigence du client). Un double clic permet de le sauvegarder, ou un clic droit donne un menu contextuel pour quitter.Maximiser l'application dans la barre d'état système?

Mais si l'application est réduite et que les utilisateurs accèdent à Démarrer-> Tous les programmes-> L'application, elle démarre une nouvelle instance.

Qu'est-ce que (en C#) dois-je faire pour que l'application maximise l'instance en cours d'exécution si l'utilisateur le fait plutôt que de déclencher une nouvelle instance?

Merci!

+2

chercher des objets Mutex et saisir une fenêtre active. Je n'ai pas le code devant moi, mais c'est la direction que vous devez prendre. - J'ai menti, essayez [cet article sur des instances uniques d'applications .net] (http://www.ai.uga.edu/mc/SingleInstance.html) –

Répondre

7

Ce answer de Jon Skeet traite de l'utilisation d'un mutex pour le faire

Mutex est la voie à suivre. Il est beaucoup moins fragile que d'utiliser des noms de processus etc.

Cependant, vous devez vous assurer que le Mutex ne ramasse-miettes. Dans le cas d'un service (qui est l'événement conduit plutôt que d'avoir une méthode « principale » qui court jusqu'à la fin), la manière la plus raisonnable de le faire est probablement mettre dans une variable statique .

Arrêtez le mutex lorsque le service s'arrête, vous n'avez donc pas besoin d'attendre la finalisation ou quoi que ce soit de ce genre.

Matthew Brindley donne cet exemple dans la même question pour his answer

[STAThread] 
static void Main() 
{ 
    using(Mutex mutex = new Mutex(false, "Global\\" + appGuid)) 
    { 
     if(!mutex.WaitOne(0, false)) 
     { 
     MessageBox.Show("Instance already running"); 
     return; 
     } 

     Application.Run(new Form1()); 
    } 
} 

Pour maximiser l'autre application, vous devrez envoyer le message à maximiser. Voir cet article sur message sending

+0

Parfait, merci! – Nicros

+0

Avoir à se rétracter mon parfait! instruction: vérifie que l'instance est en cours d'exécution et n'en démarre pas une nouvelle, mais ne répond pas à la question Comment optimiser cette application de la barre d'état système sans démarrer une nouvelle instance. – Nicros

+0

Pfft. Permettez-moi de rétracter ma rétraction - manqué le lien en bas pour le message .. va le vérifier. – Nicros

Questions connexes