0

ユーザーから報告された奇妙な問題があり、一度私が再現しました。

様々なボタンを備えたフォルムを持ち、各ボタンが長い操作を行います。

新しいボタンをクリックすると、古い操作が停止し、新しい操作が開始されます。

そして、私は奇妙な振る舞いに気づきました:

ボタンをクリックしても動作しないことがあります。次のコードのため、操作を開始できません:

if (!Worker.IsBusy)
        {
            RunReload();
        }
        else
        {
            isWorkerPendingForNewJob = true;
            Worker.CancelAsync();
        }

キャンセルは数回呼び出されますが、私のワーカーは常に忙しいです!

ここに画像の説明を入力

プロジェクトの実行にブレーキをかけると、ロックセクションで停止することに気付きました。

このロック内では、すべてのプロセスに使用されるいくつかのオブジェクトを作成しています。

画像のブレークポイントはヒットしません。backgroundworked が常にビジーで、この回線でロックされているのはなぜですか?

ここに画像の説明を入力

4

1 に答える 1

1

を呼び出すとCancelAsync()、フラグCancellationPendingが に設定されtrueます。作業関数でこのフラグを定期的に手動でチェックし、BackgroundWorker自分で中断する必要があります。あなたはすでにこれをやっていますか?

関連する MSDN ページは次のとおりです。

また、WorkerSupportsCancellationtrueをサポートしていることを確認する必要がありますCancelAsync

于 2012-10-20T23:52:36.323 に答える