Öffnen eines WPF-Window in einem anderen Thread von einer Windows Forms-Anwendung
OK, ich sollte beginnen diese aus, indem Sie sagen, ich bin nicht sicher, ob dies unbedingt der richtige Weg, damit umzugehen, aber...
Grundsätzlich habe ich ein Fenster erstellt, in WPF für die Anzeige von Benachrichtigungen in meiner Anwendung (ein bisschen wie Outlook Neue E-Mail-Benachrichtigung). Ich möchte, um zu versuchen und zeigen Sie das Fenster in einem eigenen thread (es könnte einige Arbeit in die Zukunft).
Habe ich das Fenster erstellt Verwendung von WPF, weil es ein wenig netter im Umgang mit Dingen wie AlwaysOnTop und das ein-und ausblenden.
Die Anwendung zeigt, dass die Benachrichtigung ist eine 3.5-Windows Forms App. Ich habe schon Beispiele gesehen, ähnlich wie dieses SOF: C# - winforms-Start (Splash) form nicht verstecken zum anzeigen eines Formulars in einen anderen thread aber ich bin nicht in der Lage zu starten Sie eine neue Nachricht, die Schleife mit dem WPF-Fenster.
Habe ich versucht, einfach anrufen Benachrichtigung.Show() in einem neuen thread, aber die Fenster nie angezeigt.
-
Ist es möglich, zu zeigen das WPF, in einem eigenen thread?
-
Warum sehe ich einige Ressourcen, die sagen, dass Sie sollten nicht jede UI in einem separaten thread?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den WPF Threading Model hat details über diese. Suchen Sie nach "Mehrere Fenster, Mehrere Threads".
Im Grunde genommen, starten Sie einen neuen thread, der schafft das entsprechende Fenster und ruft dann
um ein dispatcher für das Fenster, auf den neuen thread.
Dipatcher.run
war mein problem auch, ohne dass es mein neuer Fenster würde blinken und verschwinden schnell.Absolut. Erstellen eines neuen STA-Threads und das erstellen und anzeigen Ihrer
Window
aus. Ich habe diese Technik für einen splash-screen, weil die main (UI) - thread habe wirklich gefesselt andere Dinge zu tun. Es war völlig außerhalb meiner Kontrolle, wie viel Arbeit getan war, auf der UI-thread, weil ein 3rd party framework, die wir benutzten.Möglicherweise, weil der zusätzliche Komplexität. Wenn einer Ihrer
Window
s passieren will, die Daten zu einem anderen, Sie müssen sich daran zu erinnern, dass Sie die Ausführung in separaten threads. Daher, jeder sollte Dispatcher Marschall ruft, zu dem richtigen thread.Sollten Sie die Anzeige der Benachrichtigung über den main-UI-thread und wenn das Fenster geht zu irgendwelche arbeiten, ausführen, dass die Arbeit in einem hintergrund-thread. Sie sollten nicht mehr als ein thread Zugriff auf oder erstellen von UI-Objekten, selbst dann nicht, wenn Sie nicht teilen Sie diese Objekte zwischen threads.