【发布时间】:2013-10-11 04:20:35
【问题描述】:
我正在使用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();
}
【问题讨论】:
标签: c# wpf multithreading