BackgroundWorker
長時間実行される外部操作の処理に使用しています。ただし、ユーザーにはバックグラウンド操作をキャンセルするオプションがあります。私のカスタム BackgroundWorker は をサポートしているので、Thread.Abort()
私がしているのはBackgroundWorker.Abort()
、ユーザーがメインスレッドからキャンセルをトリガーしたときだけです。
しかし、スレッドは実際には終了していません。まだ外部プロセスを完了しています。スレッドを即座に終了できる方法はありますか。
外部処理を制御できないため、 のようなアプローチのフラグを送信できませんwhile (checkThreadCancelled){}
。
以下は私の擬似コードです。
何か助けはありますか?
AbortableBackgroundWorker _bgWorker;
void MainThreadFunc()
{
_bgWorker = new AbortableBackgroundWorker();
_bgWorker.DoWork += new DoWorkEventHandler(bg_DoWork);
_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
( bg_RunWorkerCompleted );
_bgWorker.WorkerSupportsCancellation = true;
_bgWorker.RunWorkerAsync();
}
void bg_DoWork()
{
//Call external dll function for processing
}
void bg_RunWorkerCompleted()
{
//Process completed code
}
void CancelBgProcess()
{
if(_bgWorker != null)
_bgWorker.Abort();
}