2009-10-25 6 views
0

내 응용 프로그램에서 각 스레드는 양식을 처리하고 해당 이벤트는 양식을 처리하는 스레드 내에서 실행됩니다.특정 양식에 대한 이벤트 처리

특정 System.Windows.Form 인스턴스에 대한 이벤트를 처리 할 수있는 방법이 있습니까? Application.Run이 내 설계에 적합하지 않고 Application.DoEvents가 응용 프로그램에 의해 인스턴스화 된 각 Form에 대한 이벤트를 처리합니다.

답변

1

당신은 모든 Form's will be on the UI Thread과 같이 이벤트가 "자유 스레드"가 아니기 때문에 약간의 문제가 발생할 것입니다. 이 문제를 해결할 수있는 방법은 장기 실행 작업을 BackgroundWorker 또는 ThreadPool으로 푸시하는 것입니다. 그런 다음 Invoke을 사용하여 UI 스레드에서 작업을 실행하여 UI가 여전히 단일 스레드 인 동안 작업을 다중 스레드 처리하도록 만듭니다.

+0

OpenGL을 사용하는 두 개의 창에서 렌더링하고 있습니다. 렌더링은 다른 스레드에서 발생합니다 (렌더링 결과를 보유하는 각 Form에 대해 하나의 스레드). 스레드 렌더링을 시작한 후 Application.Run을 호출하면 모든 스레드가 다른 스레드 (주 스레드)에서 처리됩니다. 즉, 스레드를 주 스레드 (Application.DoEvents 또는 Application.Run 호출자)와 동기화해야합니다. – Luca

+0

Windows 이벤트의 경우 예는 단일 스레드에서만 제공됩니다. 그래서 당신은 어떤 스레드가'DoEvents'를 처리 하든지 조정할 필요가 있습니다. – user7116