BackgroundWorker
의 스레드를 "죽일"수 있습니까?BackgroundWorker의 스레드를 죽일 수 있습니까?
외부 COM 인터페이스 나 데이터베이스에 대한 호출을 차단했기 때문에 내 DoWork
이벤트에서 취소 플래그를 확인할 수 없습니다. CancelAsync
은 COM에 대한 호출을 취소하지 않습니다.
어떻게 할 수 있습니까? 모든 제안은 매우 감사하겠습니다.
미리 감사드립니다.
BackgroundWorker
의 스레드를 "죽일"수 있습니까?BackgroundWorker의 스레드를 죽일 수 있습니까?
외부 COM 인터페이스 나 데이터베이스에 대한 호출을 차단했기 때문에 내 DoWork
이벤트에서 취소 플래그를 확인할 수 없습니다. CancelAsync
은 COM에 대한 호출을 취소하지 않습니다.
어떻게 할 수 있습니까? 모든 제안은 매우 감사하겠습니다.
미리 감사드립니다.
스레드를 중단하는 안전한 방법을 모르겠습니다.
배경 작업자가 작업을 취소하고 취소해야하는지 여부를 확인할 수 있지만 데이터베이스를 쿼리하지 않으면 반환 할 때까지 작업 할 수있는 작업이 많지 않습니다.
ThreadPool 스레드에서 작업을 수행하고 스레드를 포기하고 더 이상 필요하지 않으면 다른 스레드를 시작할 수 있습니다 (db 쿼리에서 돌아 왔을 때 더러운 것을하기 전에 취소해야하는지 확인). 물론 성능의 균형을 유지하고 스레드 동기화를 관리해야합니다. 이 경로를 따라 간다면 효율적인 임계 섹션 잠금을 위해 Interlocked 정적 클래스를 살펴볼 수 있습니다.
아니요, BackgroundWorker
스레드를 죽일 수는 없습니다. 사용자가 알아 차렸을 때만 취소하려고 할 수 있지만 작업을 중단하기 위해 백그라운드 스레드 자체에서 약간의 상호 작용이 필요합니다. "작업자 코드는 주기적으로 CancellationPending 속성을 true로 설정했는지 확인하십시오. "(c) MSDN
스레드를 완전히 제어해야하는 경우 Thread
클래스를 사용하여 직접 만들어야합니다.
모든 코드 소스가있는 좋은 샘플 ?? 덕분에 –
Thread, Thread.Abort, ThreadStart에 대한 토론을 검색하십시오. –