2010-02-26 2 views
5

Application.Idle 이벤트를 사용하여 "지연된"일부 동작을 수행하는 타사 Windows Forms 컨트롤을 사용하고 있습니다.Application.Apple.Idle 이벤트가 WPF 응용 프로그램에서 실행되지 않음

이제 응용 프로그램을 WPF로 이동 했으므로 이러한 작업이 중단되었습니다. System.Windows.Forms.Application.Idle 이벤트가 예상대로 발생하지 않은 것으로 나타났습니다.

WindowsFormsHost 내에서 해당 타사 컨트롤을 계속 사용할 수 있도록 WPF 응용 프로그램에서 Idle 이벤트를 발생시키는 방법은 무엇입니까? 아니요 Windows Forms 컨트롤을 수정할 수있는입니다.

답변

9

this page on MSDN은 WPF 응용 프로그램의 메시지 루프 동작을 설명합니다. 특히 ComponentDispatcher 클래스는 Windows Forms Application.Idle 이벤트와 대략 일치하는 ThreadIdle 이벤트를 catch하는 데 사용할 수있는 것처럼 보입니다.

그러면 예상대로 구성 요소가 예상하는대로 Idle 이벤트를 발생 시키려면 System.Windows.Forms.Application.RaiseIdle 메서드를 사용할 수 있습니다.

+5

감사합니다. ComponentDispatcher에 대해 몰랐습니다. 한 줄 (ComponentDispatcher.ThreadIdle + = (보낸 사람, 전자) => System.Windows.Forms.Application.RaiseIdle();) 내 문제가 해결되었습니다! – Daniel

0

WPF 응용 프로그램을 사용하는 경우 실제로 응용 프로그램에 Windows Forms 컨트롤이 포함되어 있어도 응용 프로그램을 실행하기 위해 더 이상 System.Windows.Forms.Application 클래스를 사용하지 않습니다.

대신 System.Windows.Application class (다른 네임 스페이스)을 사용하고 있습니다.

+0

OP가 표시된대로 그는 수정할 수없는 컨트롤을 사용하여 interop 시나리오에 있습니다. – Josh

관련 문제