0

ユーザーがBackgroundWorkerを介してデータを処理しているときに、アプリケーションを終了するシナリオがあります。このメソッドにキャンセルまたは終了コマンドを送信したいと思います。CancelAsync()メソッドを呼び出してみましたが、明らかに期待どおりに機能せず、ワーカーは処理を続行しました。BackgroundWorker、特にRunWorkerCompletedメソッドに処理を停止するように通知する良い方法は何ですか?状態変数を使用する必要がありますか?

4

1 に答える 1

0

これは、BackgroundWorkerでCancelAsync()を呼び出したときに実行されるコードです。

public void CancelAsync()
{
    if (!this.WorkerSupportsCancellation)
    {
        throw new InvalidOperationException(SR.GetString
                 ("BackgroundWorker_WorkerDoesntSupportCancellation"));
    }
    this.cancellationPending = true;
}

ご覧のとおりcancellationPending、の値を確認した後、内部変数をtrueに設定しますWorkerSupportsCancellation

WorkerSupportsCancellation = true;したがって、アプリの呼び出しを終了し、backGroundWorkerInstance.CancelAsync()DoWorkまたはRunWorkerCompleted内で、CancellationPendingをテストするように設定する必要があります。それが本当なら、あなたのプロセスを止めてください。

于 2012-08-31T21:16:28.767 に答える