Entwickler-Ecke

WPF / Silverlight - WPF SingleInstance bring to front?


Christoph1972 - Fr 08.03.13 23:27
Titel: WPF SingleInstance bring to front?
Hallo Leute,

meine aktuelles Projekt darf nur ein mal gestartet werden, als Vorlage habe ich mir diesen Artikel rausgesucht: Klick [http://www.codeproject.com/Articles/84270/WPF-Single-Instance-Application]

Das funktioniert soweit. Ich habe nur keine Idee, wie das Fenster in den Fordergrund bekommen. Das Fenster "läuft" im Systemtray, also Visibility.Hidden, ShowInTaskbar = false. Ich habe es so versucht:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
public partial class App : Application, ISingleInstanceApp
{
    static App application = new App();

    private const string Unique = "My_Unique_Application_String";
    [STAThread]
    public static void Main()
    {
        if (SingleInstance<App>.InitializeAsFirstInstance(Unique))
        {

            application.InitializeComponent();
            application.Run();
            // Allow single instance code to perform cleanup operations
            SingleInstance<App>.Cleanup();
        }
    }
  
    public bool SignalExternalCommandLineArgs(IList<string> args)
    {          
        application.MainWindow.Visibility = Visibility.Visible;
        application.MainWindow.Activate();
        application.MainWindow.BringIntoView();
        return true;
    }       
}


Funktioniert nur leider nicht :-)

Hat hier jemand einer Idee wie ich das Fenster in den Fordergrund bringen kann?


Christoph1972 - Mi 13.03.13 17:39

Hallo zusammen!

Die C# Lösung funktioniert scheinbar nicht mehr mit dem FW 4.0. Ich hatte mich auch über codeproject.com direkt an den Autor gewendet, leider ohne Erfolg.

Ich habe mir jetzt mit dieser Methode geholfen: Click [http://www.dreamincode.net/forums/topic/179732-wpf-c%23-limiting-an-application-to-a-single-instance/]

Ist zwar nicht so schön, aber sie funktioniert so weit. Eine Besonderheit habe ich jedoch festgestellt. Wenn ein anderes Fenster der Application geöffnet ist, wird nicht das Main-Window geöffnet, sondern das Child-Window, warum auch immer!?

Ich lasse das Thema mal offen, wenn es etwas neues geben sollte, werde ich (oder ihr) es hier niederschreiben!


jcs - Mo 15.04.13 22:09

Hi
Ich habe mich jetzt auch aus gegebenem Anlass mit diesem Problem und dem gleichen Code aus dem CodeProject beschäftigt.
Du schreibst, es funktioniert unter FW 4 nicht mehr:
War dein Fehler auch der, dass die using directive

using System.Runtime.Remoting.Channels.Ipc

nicht erkannt wurde?

Wenn das der Fall ist, kannst du den Fehler so beheben :

Rechtsklick auf Verweise->Verweis hinzufügen->System.Runtime.Remoting

Danach funktioniert der Code , das ursprüngliche Fenster kommt auch wieder sauber in den Vordergrund.

Gruß
Johannes