2012-03-06 4 views
0

BackgroundWorkers를 집중적으로 사용하는 Windows Forms 응용 프로그램을 작성 중이며 걱정되는 질문이 있습니다. 다음은 샘플 상황입니다.Button.Click 이벤트 처리기를 BackgroundWorker.RunWorkerCompleted 이벤트 처리기로 인터럽트 할 수 있습니까?

  1. BackgroundWorker는 시간이 많이 소요되는 작업을 실행합니다.
  2. BackgroundWorker가 실행 중일 때 사용자가 Form의 Button을 누릅니다.
  3. Button.Click 이벤트 처리기가 실행을 시작하고 일부 명령문을 완료하지만 더 많은 것들이 있습니다.
  4. 이 시점에서 BackgroundWorker는 작업을 완료하거나 예외를 발생 시키므로 컨트롤이 BackgroundWorker.RunWorkerCompleted 이벤트 처리기로 이동해야합니다.

글쎄, 내 질문은 : BackgroundWorker.RunWorkerCompleted 이벤트 처리기 Button.Click 이벤트 처리기의 실행을 방해 할 가능성이 있습니까?

답변

0

DoWork이 완료되면 BackgroundWorker을 시작한 스레드에서 RunWorkerCompleted이 호출됩니다. 주 스레드라고 가정 해 봅시다. 즉, 메인 스레드의 메시지 대기열에 메시지를 게시합니다. 주 스레드가 현재 메시지 (예 : Button.Click 이벤트)를 처리중인 경우 RunWorkerCompleted은 도착할 때까지 스레드의 메시지 대기열에 있습니다. 의미 - 버튼 이벤트 핸들러와 인터럽트/충돌하지 않습니다.

관련 문제