2009-11-30 5 views

답변

3

당신이 스레드를 얻을해야합니다 :

  • 화재 누군가가 가
  • 가 다른 것을 대기 이벤트를 설정 확인되는 다른 값 누군가를 설정 수신 대기 이벤트를 스레드가 대기 중임 (예 : AutoResetEvent 또는 ManualResetEvent)
  • 무한 join() 명령 ( 해당 스레드)에서 을 반환하십시오.

이들 중 어느 것도 스레드를 홀로 남겨 두거나 다른 스레드를 가져 오지는 않지만, 이는 멀티 스레드의 즐거움입니다. 나는 일반적으로 사건을 해고해서 나갔다. 전체 프레임 워크의 BackgroundWorker 객체는이 작업을 수행하지만 불행히도 CF에서는 사용할 수 없으므로 직접 작성해야합니다 (아마도이 ​​작업을 수행하는 Thread 클래스의 래퍼를 작성해야합니다).

+0

두 가지 질문 : 이벤트를 발생시키는 경우이 이벤트는이 스레드 또는 기본 스레드에서 실행됩니다. 두 번째 질문은 귀하의 세 번째 타당성에 관한 것입니다 : AutoResetEvent가 응용 프로그램을 차단합니까? – VansFannel

+0

이벤트를 발생시키는 경우 배경 스레드에 이벤트가 발생합니다. UI를 업데이트하려는 경우 .Invoke() 또는 BeginInvoke()를 통해 UI 스레드로 마샬링해야합니다. 핸들을 기다리는 경우이 대기 시간 (권장되지 않음)에 UI 스레드를 잠 그거나이 이벤트를 대기중인 추가 스레드가 있어야합니다. 그러나 후자의 경우 UI를 건드리지 않으려면 마샬링 문제가 발생합니다. 다른 방법은 UI 스레드가 백그라운드 스레드가 완료 될 때 업데이트하는 타이머에 값 (bool)을 폴링하도록하는 것입니다. 그러면 마샬링이 필요하지 않습니다. – Quibblesome

+0

나는 개인적으로 여전히 이벤트 발생을 원합니다. 나 자신을 마샬링한다. – Quibblesome

1

사용자가 직접 스레드를 생성하면 RetrieveSoMuchData (..)가 완료 되 자마자 스레드가 종료됩니다.

AutoResetEvent과 같은 EventWaitHandle을 사용하여이 사실을 사용자에게 알릴 수 있습니다.

+0

AutoResetEvent가 응용 프로그램을 차단합니까? – VansFannel

+0

AutoResetEvent는 Set를 호출 할 때까지 (이벤트를 기다리는 경우) 차단합니다. –

관련 문제