我有一个使用了BackgroundWorker的Windows表单。BackgroundWorker实例化了一个对象,然后执行该对象中的方法。我的问题是,当我使用backgroundworker.CancelAsync时,运行在远程对象上的方法并没有停止。在下面的示例中,dowork方法在单击取消按钮后继续执行。FYI,dowork正在遍历电子表格,并根据电子表格中的行进行一些数据操作。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
myObject newObject = new myObject();
newObject.dowork();
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
backgroundWorker1.ReportProgress(0);
return;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
if (backgroundWorker1.IsBusy) backgroundWorker1.CancelAsync();
}
你的想法是什么?
谢谢
newObject.dowork()
是阻塞的,所以后台工作线程永远不会评估取消语句。你可以创建一个任务来代替使用后台工作线程,但取消同步方法可能很困难... - Ron Beyer