C# BackgroundWorker 클래스란?
이름 그대로 BackgroundWorker(백그라운드 작업자) 클래스는 백그라운드에서 지속적으로 실행되는 스레드를 구성하고, 필요할 때마다 메인 스레드와 통신할 수 있도록 도와주는 기능을 제공합니다.
BackgroundWorker는 Windows Forms 환경에서 스레드 구현을 훨씬 손쉽게 만들어 줍니다. 시간이 오래 걸리거나 리소스를 많이 소모하는 작업은 반드시 별도의 스레드에서 처리해야 하며, 그렇지 않으면 UI가 멈추는 현상(프리징)이 발생합니다. 또한 작업이 완료된 후에는 결과 메시지를 전달하고 사용자 인터페이스(UI)를 갱신하는 과정이 필요합니다.
BackgroundWorker의 주요 속성
BackgroundWorker 클래스에서 사용되는 주요 속성은 다음과 같습니다.
참고 자료: Microsoft Developer Network(MSDN)
| 번호 | 속성 이름 및 설명 |
|---|---|
| 1 | CancellationPending 애플리케이션이 백그라운드 작업의 취소를 요청했는지 여부를 나타내는 값입니다. |
| 2 | CanRaiseEvents 해당 구성 요소(Component)가 이벤트를 발생시킬 수 있는지 여부를 나타내는 값을 가져옵니다. |
| 3 | Container Component가 포함되어 있는 IContainer를 가져옵니다. |
| 4 | DesignMode Component가 현재 디자인 모드에 있는지 여부를 나타내는 값을 가져옵니다. (Component에서 상속됨) |
| 5 | Events 이 Component에 연결된 이벤트 처리기 목록을 가져옵니다. |
| 6 | IsBusy BackgroundWorker가 현재 비동기 작업을 실행 중인지 여부를 나타내는 값을 가져옵니다. |
| 7 | Site Component의 ISite를 가져오거나 설정합니다. |
| 8 | WorkerReportsProgress BackgroundWorker가 진행률 업데이트를 보고할 수 있는지 여부를 나타내는 값을 가져오거나 설정합니다. |
| 9 | WorkerSupportsCancellation BackgroundWorker가 비동기 취소를 지원하는지 여부를 나타내는 값을 가져오거나 설정합니다. |
속성 활용 시 참고 사항
실무에서는 RunWorkerAsync()를 호출하기 전에 WorkerReportsProgress와 WorkerSupportsCancellation 속성을 true로 설정하는 것이 일반적입니다. 진행률 보고를 활성화하면 ProgressChanged 이벤트를 통해 UI에 진행 상황을 표시할 수 있으며, 취소 지원을 활성화하면 DoWork 내부에서 CancellationPending 값을 주기적으로 확인하여 작업을 안전하게 중단할 수 있습니다. 작업 종료 후에는 RunWorkerCompleted 이벤트에서 결과를 처리하고 UI를 갱신하면 됩니다.