Öffnen eines WPF-Fensters in einem anderen Thread aus einer Windows Forms App

8

Okay, ich sollte damit beginnen, indem ich sage, ich bin mir nicht sicher, ob dies der richtige Weg ist, um damit umzugehen, aber ...

Grundsätzlich habe ich in WPF ein Fenster zum Anzeigen von Benachrichtigungen in meiner Anwendung erstellt (ein bisschen wie Outlook New Mail Benachrichtigung). Ich möchte versuchen, dieses Fenster in seinem eigenen Thread zu zeigen (es könnte in Zukunft etwas Arbeit machen).

Ich habe das Fenster mit WPF erstellt, weil es etwas besser ist, Dinge wie AlwaysOnTop und Ein- und Ausblenden zu handhaben.

Die Anwendung, die die Benachrichtigung anzeigt, ist eine 3.5 Windows Forms App. Ich habe ähnliche Beispiele zu diesem Startformular für SOF: C # winforms (Splash) gesehen, das sich nicht versteckt , um ein Formular anzuzeigen ein anderer Thread, aber ich kann keine neue Nachrichtenschleife mit dem WPF-Fenster starten.

Ich habe versucht, Notification.Show () nur in einem neuen Thread aufzurufen, aber das Fenster wird nie angezeigt.

  1. Ist es möglich, dieses WPF in einem eigenen Thread zu zeigen?

  2. Warum sehe ich in einigen Ressourcen, dass Sie keine Benutzeroberfläche in einem separaten Thread anzeigen sollten?

MrEdmundo 08.04.2009, 11:30
quelle

3 Antworten

15

Das WPF-Threading-Modell enthält Details dazu. Suchen Sie nach "Mehrere Windows, mehrere Threads."

Grundsätzlich starten Sie einen neuen Thread, der das entsprechende Fenster erstellt und dann

aufruft %Vor%

, um einen Dispatcher für dieses Fenster im neuen Thread auszuführen.

    
Jon Skeet 08.04.2009, 11:39
quelle
3
  
  1. Ist es möglich, dieses WPF in seinem eigenen Thread zu zeigen?
  2.   

Absolut. Erstellen Sie einfach einen neuen STA-Thread und erstellen und zeigen Sie Ihren Window daraus an. Ich habe diese Technik für einen Begrüßungsbildschirm verwendet, weil der Haupt (UI) -Thread wirklich mit anderen Dingen verbunden war. Es war völlig außer Kontrolle, wie viel Arbeit auf dem UI-Thread wegen eines von uns verwendeten 3rd-Party-Frameworks geleistet wurde.

  
  1. Warum sehe ich in einigen Ressourcen, dass Sie keine Benutzeroberfläche in einem separaten Thread anzeigen sollten?
  2.   

Möglicherweise wegen der zusätzlichen Komplexität. Wenn eines Ihrer Window s Daten an ein anderes weitergeben möchte, müssen Sie daran denken, dass sie in separaten Threads ausgeführt werden. Daher sollte jeder seinen Dispatcher verwenden, um Aufrufe an den richtigen Thread zu vermitteln.

    
Kent Boogaart 08.04.2009 11:45
quelle
0

Sie sollten die Benachrichtigung mit dem Hauptthread der Benutzeroberfläche anzeigen und wenn dieses Fenster eine Arbeit ausführen soll, führen Sie diese Arbeit in einem Hintergrundthread aus. Sie sollten nicht mehr als einen Thread verwenden, um auf UI-Objekte zuzugreifen oder sie zu erstellen, auch wenn Sie diese Objekte nicht zwischen Threads teilen.

    
Gerco Dries 08.04.2009 11:35
quelle

Tags und Links