Erstellen einer WPF-Instanz mit einer einzigen Instanz, die das geöffnete Fenster wiederherstellt, wenn versucht wird, eine andere Instanz zu öffnen?

8

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?

    
Tsukasa 14.02.2014, 21:34
quelle

2 Antworten

15

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:

%Vor%

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:

%Vor%     
Sheridan 14.02.2014, 23:09
quelle
9

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:

%Vor%

Ich hoffe, es hilft: D

    
Ricardo França 08.07.2016 18:24
quelle

Tags und Links