1

バックグラウンドワーカー オブジェクトを使用して、必要に応じて非同期処理とスレッド処理を実行します。バックグラウンドワーカーを実行すると、実行中に停止して終了しないことがあります。通常、同時に複数のバックグラウンドワーカーを実行しているときにこれを行います。

ストールしたときにやりたいことは、操作をキャンセルして再実行することです。私の問題は、いつ停止したかを検出する方法がわからないことです。ワーカーが停止したことを「通知」するために追加する必要があるコードはありますか、または知る方法はありませんか?

ありがとう、

4

2 に答える 2

4

コードをデバッグして、停止する理由を突き止める必要があります。

  • マルチスレッドのデッドロックはありますか?
  • リソース プールは使い果たされていますか?
  • ネットワーク リソースを無期限に待機していますか?
  • プロセスの途中で例外がスローされますか?

BackgroundWorker は次のコールバックを提供します。

  • 作業開始前に呼び出される DoWork。
  • 作業が完了すると呼び出される RunWorkerCompleted。

これをラッパーで拡張して、非同期アクションに何らかのサービス レベルを適用する場合、アクションに一定の時間がかかる場合に警告をログに記録できます。(例: DoWork が呼び出されたときにタイマーを開始し、タイマーが経過すると警告をログに記録し、完了したらタイマーをクリアします)

于 2009-06-15T04:27:32.743 に答える
2

それは、「失速」の意味に完全に依存します。ワーカー スレッドのデッドロックに成功した場合は、問題を見つけて混乱を解消する必要があります。例外をスローしている場合は、イベント引数にRunWorkerCompletednull 以外を指定して、イベントが発生する必要があります。Error

于 2009-06-15T04:25:37.553 に答える