我BackgroundWorker
用于处理长时间运行的外部操作。但是,用户可以选择取消后台操作。由于我的自定义 BackgroundWorker 支持Thread.Abort()
,我所做的就是BackgroundWorker.Abort()
当用户从主线程触发 Cancel 时。
但是线程实际上并没有终止,它仍在完成外部进程。有什么方法可以立即终止线程。
我无法控制外部处理,因此无法为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();
}