2009-02-12 9 views
6

BackgroundWorker의 스레드를 "죽일"수 있습니까?BackgroundWorker의 스레드를 죽일 수 있습니까?

외부 COM 인터페이스 나 데이터베이스에 대한 호출을 차단했기 때문에 내 DoWork 이벤트에서 취소 플래그를 확인할 수 없습니다. CancelAsync은 COM에 대한 호출을 취소하지 않습니다.

어떻게 할 수 있습니까? 모든 제안은 매우 감사하겠습니다.

미리 감사드립니다.

답변

1

스레드를 중단하는 안전한 방법을 모르겠습니다.

배경 작업자가 작업을 취소하고 취소해야하는지 여부를 확인할 수 있지만 데이터베이스를 쿼리하지 않으면 반환 할 때까지 작업 할 수있는 작업이 많지 않습니다.

ThreadPool 스레드에서 작업을 수행하고 스레드를 포기하고 더 이상 필요하지 않으면 다른 스레드를 시작할 수 있습니다 (db 쿼리에서 돌아 왔을 때 더러운 것을하기 전에 취소해야하는지 확인). 물론 성능의 균형을 유지하고 스레드 동기화를 관리해야합니다. 이 경로를 따라 간다면 효율적인 임계 섹션 잠금을 위해 Interlocked 정적 클래스를 살펴볼 수 있습니다.

3

아니요, BackgroundWorker 스레드를 죽일 수는 없습니다. 사용자가 알아 차렸을 때만 취소하려고 할 수 있지만 작업을 중단하기 위해 백그라운드 스레드 자체에서 약간의 상호 작용이 필요합니다. "작업자 코드는 주기적으로 CancellationPending 속성을 true로 설정했는지 확인하십시오. "(c) MSDN

스레드를 완전히 제어해야하는 경우 Thread 클래스를 사용하여 직접 만들어야합니다.

+0

모든 코드 소스가있는 좋은 샘플 ?? 덕분에 –

+0

Thread, Thread.Abort, ThreadStart에 대한 토론을 검색하십시오. –

관련 문제