2009-03-17 2 views
1

장치의 상태를 모니터하는 스레드가 있습니다 (i/o 사용). 그러면 연결 상태 (연결됨, 연결 끊김, 오류)에 대한 여러 UI (양식/대화 상자 ..) 부분으로 이벤트가 시작됩니다. 이 상태에 따라 양식과 대화 상자가 파괴되고, 생성되고, 활성화되고 비활성화됩니다.backgrount 스레드에서 메인 스레드로의 제어 전환

내 문제 :

I getting Cross-Thread exception because the thread doing the operations like Dispose the from, create the from .... . I using smart client, forms and dialogs are part of the WorkItemController and i just terminating that. 

나는 유 호출 또는 BeginInvoke를 사용하지 않습니다. 이 스레드가 상태 모니터링 만 계속하기를 원합니다. 그래서이 스레드는 주 스레드에 제어권을 주어야하며 주 스레드는 양식을 닫거나 양식을 작성합니다.

그냥 한 스레드에서 다른 스레드로 컨트롤을 이동하는 방법을 원합니다. 어떤 방법이 있습니까?

답변

1

가장 좋은 해결책은 Invoke를 사용하여 메인 스레드로 다시 전환하는 것입니다.

또는 기본 스레드와 백그라운드 스레드간에 공유되는 전역 변수를 사용할 수 있지만 기본 스레드가 루프의 변수를 확인해야하므로 GUI가 중지 될 수 있습니다.

또는 주 스레드에서 실행되는 System.Windows.Forms.Timer를 사용하십시오.

관련 문제