2010-08-20 7 views
0

스레드의 폴링 루프에서 업데이트 된 개체가 있습니다. 이 객체는 데이터가 변경되면 특정 이벤트를 발생시킵니다.Windows Forms에서 스레드에서 이벤트 처리기로 이벤트 호출 동기화

이 객체를 Windows 폼과 함께 사용하려고합니다.이 객체는 UI에서 폼을 처리하기 위해 이벤트 핸들러를 생성합니다. 물론 이러한 처리기에서 UI를 직접 조작하려고하면 크로스 스레드 연산 예외가 발생합니다.

대리인을 사용하여 InvokeRequired를 확인하는 표준 절차를 진행하면 작동하도록 할 수 있습니다 (예 : blah blah blah). 그러나이 객체를 라이브러리로 게시하려고합니다. 최종 사용자가 모든 것을 걱정하지 않아도되기를 바랍니다.

내 개체가 어떻게 든 그 이벤트 콜백을 양식과 동기화하여 최종 사용자가 그 핸들러의 UI 요소를 걱정없이 조작 할 수있게하고 싶습니다.

이 방법이 있습니까 ??

답변

0

개체가 항상 단일 양식과 관련된 경우 실제로는 간단한 트릭이 있습니다. 여기서 중요한 사실은 나중에 폼에 영향을주기를 원하는 스레드에서 객체를 인스턴스화한다는 것입니다.

트릭은 생성자의 객체에서 간단한 Control (new Control())을 인스턴스화하는 것입니다. 폼에서 논리를 수행 할 때이 간단한 컨트롤의 Invoke/BeginInvoke 메서드를 사용하여 올바른 호출 스레드에 작업을 디스패치합니다. 따라서 개체에 직접 디스 패칭 논리가 있으므로 개체의 다른 사용자가이 작업을 수행 할 필요가 없습니다.

관련 문제