2010-02-26 9 views
5

Ich verwende ein Windows Forms-Steuerelement von Drittanbietern, das einige Aktionen ausführt, die mit dem Application.Idle-Ereignis "verzögert" werden.Application.Idle-Ereignis, das nicht in WPF-Anwendung ausgelöst wird

Jetzt, wo wir unsere Anwendung auf WPF verschieben, funktionieren diese Aktionen nicht mehr. Ich habe festgestellt, dass das System.Windows.Forms.Application.Idle -Ereignis nicht wie erwartet ausgelöst wird.

Wie kann ich das Idle-Ereignis in einer WPF-Anwendung auslösen, damit ich dieses Steuerelement von Drittanbietern (in einem WindowsFormsHost) weiterhin verwenden kann? Es ist nicht möglich, das Windows Forms-Steuerelement zu ändern.

Antwort

9

Sie sollten this page on MSDN lesen, die das Verhalten der Nachrichtenschleife in einer WPF-Anwendung beschreibt. Insbesondere sieht es so aus, als ob die ComponentDispatcher-Klasse verwendet werden kann, um ein ThreadIdle-Ereignis abzufangen, das in etwa dem Windows Forms Application.Idle-Ereignis entsprechen würde.

Sie könnten dann vermutlich die Methode System.Windows.Forms.Application.RaiseIdle verwenden, um das Leerlaufereignis zu erhöhen, wie die Komponente erwartet.

+5

Danke, ich wusste nicht über ComponentDispatcher. Eine Zeile (ComponentDispatcher.ThreadIdle + = (Absender, e) => System.Windows.Forms.Application.RaiseIdle (e);) und mein Problem ist gelöst! – Daniel

0

Wenn Sie eine WPF-Anwendung verwenden, verwenden Sie die System.Windows.Forms.Application-Klasse nicht mehr zum Ausführen Ihrer Anwendung, selbst wenn Ihre Anwendung ein Windows Forms-Steuerelement enthält.

Stattdessen verwenden Sie die System.Windows.Application class (anderen Namespace).

+0

Wie das OP angegeben hat, befindet er sich in einem Interop-Szenario mit einem Steuerelement, das nicht geändert werden kann. – Josh

Verwandte Themen