2010-02-26 1 views
5

Я использую сторонний элемент управления Windows Forms, который выполняет некоторые действия «задерживается» с использованием события Application.Idle.Приложение Application.Idle не запускается в приложении WPF

Теперь, когда мы перемещаем наше приложение в WPF, эти действия перестали работать. Я обнаружил, что событие System.Windows.Forms.Application.Idle не создается, как ожидалось.

Как я могу запустить событие Idle в WPF-приложении, чтобы я мог продолжать использовать этот сторонний элемент управления (в WindowsFormsHost)? Это не можно изменить элемент управления Windows Forms.

ответ

9

Вы должны прочитать this page on MSDN, который описывает поведение цикла сообщений в приложении WPF. В частности, похоже, что класс ComponentDispatcher можно использовать для захвата события ThreadIdle, которое будет примерно соответствовать событию Windows Forms Application.Idle.

Возможно, вы могли использовать метод System.Windows.Forms.Application.RaiseIdle для подъема события Idle, ожидаемого компонентом.

+5

Спасибо, я не знал о ComponentDispatcher. Одна строка (ComponentDispatcher.ThreadIdle + = (отправитель, e) => System.Windows.Forms.Application.RaiseIdle (e);) и моя проблема решена! – Daniel

0

Если вы используете приложение WPF, вы фактически больше не используете класс System.Windows.Forms.Application для запуска своего приложения, даже если ваше приложение содержит элемент управления Windows Forms.

Вместо этого вы используете System.Windows.Application class (другое пространство имен).

+0

Как указано OP, он находится в сценарии взаимодействия, используя элемент управления, который нельзя изменить. – Josh