BackgroundWorker
을 사용하면 수행하려는 작업을 수행하는 가장 간단한 방법입니다. BackgroundWorker
은 스레드 처리 논리를 단순화하여 작성해야하는 코드가 거의 없습니다.
- 이제까지 당신의 장기 실행 방법 내부 UI를 업데이트하지 말라 : 당신은 세 가지 이벤트 (
DoWork
, ProgressChanged
및 RunWorkerCompleted
)를 처리하고 몇 가지 원칙을 따라야한다. 대신 ReportProgress
을 호출하고 UI 로직에서 ProgressChanged
이벤트를 처리하십시오.
- 작업자가 UI 스레드에서 실행되고 있지 않기 때문에 메서드가 throw하는 예외가 UI에 자동으로 표시되지 않는다는 점을 이해해야합니다. 그냥 자동으로 콘솔에 기록됩니다. 메서드가 완료되면
RunWorkerCompletedEventArgs
의 Error
속성을 확인하고 예외를 처리 (또는 throw)하는 것이 매우 중요합니다. 이렇게하지 않으면 방법이 실패했다는 것을 알 수 없습니다.
- 메서드를 취소 할 수있는 경우 주기적으로
CancellationPending
속성을 확인하여 취소가 요청되었는지 확인해야합니다. 취소 된 경우 취소 처리가 완료되면 개체의 Cancel
속성을 설정합니다.CancellationPending
은 true이고 Cancel
은 false 일 수 있습니다. 예를 들어 사용자가 취소를 요청하고 메서드가 CancellationPending
을 확인할 기회가 있기 전에 완료 될 때이 문제가 발생합니다.
- 해당하는 경우
RunWorkerCompleted
이벤트 처리기에서 Cancel
을 확인하면 UI가 작업자가 실행되는 동안 발생한 상황에 대한 적절한 응답을 제공 할 수 있습니다.
설명서의 예제는 모두 양식의 메서드를 호출하는 DoWork
이벤트 처리기를 보여줍니다. 이것은 거의 당신이하고 싶은 것이 아닙니다. 비즈니스 논리를 UI와 분리하는 것이 일반적으로 좋은 생각입니다. 백그라운드 작업에서는 필수적입니다. 장기 실행 메소드가 UI가 존재한다는 것을 모르는 클래스의 멤버 인 경우 부주의로 인해 상태 표시 줄 등을 업데이트하는 메소드를 호출 할 위험이 없습니다.
아하 ... MVC는 무엇입니까. OK .. 많은 감사합니다. – Nestor