のスレッドを「殺す」ことは可能BackgroundWorker
ですか?
私のDoWork
イベントでは、外部 COM インターフェイスへのブロッキング呼び出しまたはデータベースへのクエリがあるため、キャンセル フラグを確認できません。CancelAsync
COM への呼び出しをキャンセルしません。
どうすればいいですか?どんな提案でも大歓迎です。
前もって感謝します。
のスレッドを「殺す」ことは可能BackgroundWorker
ですか?
私のDoWork
イベントでは、外部 COM インターフェイスへのブロッキング呼び出しまたはデータベースへのクエリがあるため、キャンセル フラグを確認できません。CancelAsync
COM への呼び出しをキャンセルしません。
どうすればいいですか?どんな提案でも大歓迎です。
前もって感謝します。
いいえ、BackgroundWorker
スレッドを強制終了することはできません。気がついたようにキャンセルを試みることしかできませんが、作業を停止するには、バックグラウンド スレッド自体から何らかの対話が必要です。"ワーカー コードは定期的に CancellationPending プロパティをチェックして、 true に設定されています。」 (c) MSDN
スレッドを完全に制御する必要がある場合は、Thread
クラスを使用して自分でスレッドを作成する必要があります。
スレッドを中止する安全な方法を知りません。
バックグラウンドワーカーは、キャンセルする必要があるかどうかを確認して自分自身をキャンセルできますが、データベースへのクエリをオフにしている場合は、戻るまでできることはあまりありません。
ThreadPool スレッドで作業を行い、スレッドが不要になった場合はスレッドを破棄して別のスレッドを開始できます (db クエリから戻ってきたときに、厄介なことをする前にキャンセルする必要があるかどうかを確認してください)。もちろん、パフォーマンスのバランスを取り、スレッドの同期を管理する必要があります。そのパスをたどると、効率的なクリティカル セクション ロックのために Interlocked 静的クラスを調べることができます。