이 이벤트는 RunWorkerAsync 메서드를 호출할 때 발생합니다. 이때 수행하는 데 시간이 많이 걸릴 수 있는 작업이 시작됩니다.
DoWork 이벤트 처리기의 코드에서는 정기적으로 CancellationPending 속성 값을 확인하여 true이면 작업을 중단해야 합니다. 이때 System.ComponentModel.DoWorkEventArgs의 Cancel 플래그를 true로 설정할 수 있으며, RunWorkerCompleted 이벤트 처리기에 있는 System.ComponentModel.RunWorkerCompletedEventArgs의 Cancelled 플래그가 true로 설정됩니다.
주의 |
|---|
| DoWork 이벤트 처리기의 코드에서는 취소가 요청되면 작업을 종료할 수 있으며, 폴링 루프에서 true로 설정되는 CancellationPending을 놓칠 수 있습니다. 이 경우 취소가 요청된 경우에도 RunWorkerCompleted 이벤트 처리기에 있는 System.ComponentModel.RunWorkerCompletedEventArgs의 Cancelled 플래그가 true로 설정되지 않습니다. 이러한 상황을 경쟁 조건이라고 하는데, 경쟁 조건은 다중 스레드 프로그래밍에서 제기되는 일반적인 문제입니다. 다중 스레드 디자인 문제에 대한 자세한 내용은 관리되는 스레딩을 구현하는 최선의 방법을 참조하십시오. |
작업에서 결과를 생성하면 DoWorkEventArgs.Result 속성에 결과를 할당할 수 있습니다. 이 결과는 RunWorkerCompletedEventArgs.Result 속성의 RunWorkerCompleted 이벤트 처리기에서 사용할 수 있습니다.
작업이 코드에서 처리하지 않는 예외를 발생시키는 경우 BackgroundWorker는 예외를 catch하여 RunWorkerCompleted 이벤트 처리기에 전달합니다. 여기에서 예외는 System.ComponentModel.RunWorkerCompletedEventArgs의 Error 속성으로 노출됩니다. Visual Studio 디버거에서 실행 중인 경우, 디버거는 DoWork 이벤트 처리기에서 처리되지 않은 예외가 발생한 지점에 도달하면 실행을 중단합니다. BackgroundWorker가 두 개 이상 있는 경우 이 개체를 직접 참조하면 DoWork 이벤트 처리기가 BackgroundWorker의 특정 인스턴스에 연결되므로 직접 참조하지 않아야 합니다. 대신 DoWork 이벤트 처리기에서 sender 매개 변수를 캐스팅하여 BackgroundWorker에 액세스해야 합니다.
DoWork 이벤트 처리기에서 사용자 인터페이스 개체를 조작하지 않도록 주의해야 합니다. 대신 BackgroundWorker 이벤트를 통해 사용자 인터페이스와 통신합니다.
이벤트 처리에 대한 자세한 내용은 이벤트 사용을 참조하십시오.