obackgroundworker.CancelAsync(); を呼び出します。現在別のスレッドで何らかの作業を行っているバックグラウンド ワーカーで、アプリケーションを終了する前に while (obackgroundworker.IsBusy == true) を使用して終了するのを待ちます (スレッドが処理を行っていない間にユーザーが気が変わった場合に備えて)。きれいに閉じます)
保留中のキャンセルのフラットは正しく true に設定されていますが、スレッドは終了しません。ワーカー スレッドでは次のようになります。
backgroundworker obackgroundworker = (backgroundworker)sender;
if (obackgroundworker.cancellationpending == true)
e.cancel = true;
キャンセルが保留中かどうかを確認してから、キャンセルされたフラグをtrueに設定する必要があります。これにより、スレッドが実際に終了することもあると思います...? または、実際に終了するためにキャンセルが検出されたときに、スレッドから呼び出す必要がある他の関数がありますか?
上記とまったく同じようにバックグラウンドワーカーを使用する多くの例を読みましたが、問題は報告されていません。
ソース:
http://www.albahari.com/threading/part3.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads. aspx
ありがとう