我正在使用BackgroundWorker
来处理长时间运行的外部操作。但是用户可以选择取消后台操作。由于我的自定义BackgroundWorker支持Thread.Abort()
,因此当用户从主线程触发Cancel时,我所做的全部为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();
}