Frage

Ich habe eine kleine WPF -App geschrieben, die, wenn 'geschlossen' für das Systemfach minimiert wird (Kundenanforderung). Wenn Sie das Klicken auf das Klicken auf das Doppelklicken, werden Sie zurückgepackt, oder klicken Sie mit der rechten Maustaste ein Kontextmenü zum Beenden.

Wenn die App jedoch minimiert ist und die Benutzer zu Start-> alle Programme navigieren-> Die Anwendung startet eine neue Instanz.

Was muss ich (in C#) tun, damit die App die laufende Instanz maximiert, wenn der Benutzer dies tut, anstatt eine neue Instanz aufzunehmen?

Vielen Dank!

War es hilfreich?

Lösung

Dies Antworten Von Jon Skeet diskutiert mit einem Mutex, um es zu tun

Mutex ist der richtige Weg. Es ist viel weniger zerbrechlich als die Verwendung von Prozessnamen usw.

Sie müssen jedoch sicherstellen, dass der Mutex keinen Müll nicht gesammelt hat. Bei einem Dienst (der Ereignis angesteuert und nicht eine "Haupt" -Methode hat, die bis zur Fertigstellung ausgeht) ist die sinnvollste Möglichkeit, dies zu tun, wahrscheinlich in eine statische Variable.

Entsorgen Sie den Mutex, wenn der Dienst gestoppt wird, sodass Sie nicht auf die Abschluss oder ähnliches warten müssen.

Matthew Brindley gibt dieses Beispiel in der gleichen Frage für seine Antwort

[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());
   }
}

Um die andere Anwendung zu maximieren, müssen Sie sie die Nachricht senden, um zu maximieren. Siehe diesen Artikel über Nachricht senden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top