6

のスレッドを「殺す」ことは可能BackgroundWorkerですか?

私のDoWorkイベントでは、外部 COM インターフェイスへのブロッキング呼び出しまたはデータベースへのクエリがあるため、キャンセル フラグを確認できません。CancelAsyncCOM への呼び出しをキャンセルしません。

どうすればいいですか?どんな提案でも大歓迎です。

前もって感謝します。

4

2 に答える 2

3

いいえ、BackgroundWorkerスレッドを強制終了することはできません。気がついたようにキャンセルを試みることしかできませんが、作業を停止するには、バックグラウンド スレッド自体から何らかの対話が必要です。"ワーカー コードは定期的に CancellationPending プロパティをチェックして、 true に設定されています。」 (c) MSDN

スレッドを完全に制御する必要がある場合は、Threadクラスを使用して自分でスレッドを作成する必要があります。

于 2009-05-22T13:41:28.193 に答える
1

スレッドを中止する安全な方法を知りません。

バックグラウンドワーカーは、キャンセルする必要があるかどうかを確認して自分自身をキャンセルできますが、データベースへのクエリをオフにしている場合は、戻るまでできることはあまりありません。

ThreadPool スレッドで作業を行い、スレッドが不要になった場合はスレッドを破棄して別のスレッドを開始できます (db クエリから戻ってきたときに、厄介なことをする前にキャンセルする必要があるかどうかを確認してください)。もちろん、パフォーマンスのバランスを取り、スレッドの同期を管理する必要があります。そのパスをたどると、効率的なクリティカル セクション ロックのために Interlocked 静的クラスを調べることができます。

于 2009-05-22T13:44:55.253 に答える