Tut mir leid, der Titel ist schwer zu verstehen. Ich wusste nicht, wie ich es formulieren sollte.
Ich habe eine Anwendung, die nur eine Instanz pro Benutzersitzung ausführen darf. Wenn der Benutzer klickt, um die Anwendung erneut zu starten, möchte ich die bereits zum Fokussieren bringen.
Das Fenster wird wahrscheinlich Sichtbarkeit zu kollabiert haben.
Wenn es sichtbar ist, kann ich
verwenden %Vor%Aber wenn das Fenster kollabiert ist, gibt es eine Möglichkeit für mich, es wieder sichtbar zu machen?
Sie suchen nach Mutex
Klasse . Es ist ziemlich kompliziert, aber zum Glück wurde das Singleton-Muster ausführlich diskutiert. Es gibt einige gute Artikel darüber, aber Sie finden eine gute Implementierung davon in der C # .NET Einzelinstanz-Anwendung Seite auf der Sanity Free Coding Website. Von der verknüpften Seite:
Sie fragen sich jetzt wahrscheinlich, wie Sie eine Main
-Methode in einer WPF-Anwendung haben, richtig? Nun, es gibt ein paar Dinge, die Sie tun müssen, aber es ist nicht schwer. Weitere Informationen finden Sie in der Schreiben einer benutzerdefinierten Main () -Methode für WPF-Anwendungen Artikel, der dies im Detail erklärt. Aus diesem Artikel:
Sie müssen im Grunde die Buildaktion der Anwendung von "Anwendungsdefinition" in "Seite" ändern, einen Konstruktor erstellen, der "InitializeComponent" aufruft, und Ihr Main () schreiben, indem Sie schließlich eine der Methodenüberladungen der Anwendung aufrufen. ... Vergessen Sie auch nicht, den "StartupUri" aus der App.xaml zu entfernen, da sonst eine andere Kopie des Fensters angezeigt wird (es sei denn, Sie erhalten einen Fehler, weil der URI auf eine nicht vorhandene XAML-Ressource verweist).
Wenn wir also diese beiden Ressourcen zusammenlegen, sehen wir, dass Ihre App.xaml.cs
-Datei in etwa so aussehen sollte:
Ich habe das Tag StartupUri
aus der App.xaml-Datei entfernt.
Ändern Sie die Build-Aktion von App.xaml von ApplicationDefinition
in Page
(Sie können dies im Eigenschaftenfenster ändern).
Fügen Sie einen Verweis auf Microsoft.VisualBasic
(Namespace zu WindowsFormsApplicationBase) hinzu.
Fügen Sie in der Klasse App.xaml.cs
diesen Code ein:
Ich hoffe, es hilft: D