System.ComponentModel.BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.WorkerReportsProgress = true;//允许报告进度
bgWorker.WorkerSupportsCancellation = true;//允许取消
bgWorker.DoWork += (s, ee) =>
{
while (!bgWorker.CancellationPending)
{
if (count % 2 == 0)
{
//就干嘛干嘛
}
else
{
//就干啥干啥
}
count++;
Task.Delay(2).Wait();
}
ee.Cancel = true;
};
如果外部需要取消的话,则执行
this.bgWorker.CancelAsync();
CancelAsync: 是 BackgroundWorker 类中的一个方法,用于请求取消后台任务的执行。它允许你在后台任务运行时发出取消请求,并在适当的时候停止任务的执行。一旦调用了这个方法,BackgroundWorker 将设置 CancellationPending 属性为 true。在 DoWork 事件处理程序中,你可以在适当的时候检查 CancellationPending 属性,并根据其值来终止任务的执行。这通常涉及到循环或长时间运行的操作,在操作的某个点检查 CancellationPending,然后安全地退出循环或执行。
ee.cancel=true和CancellationPending =true的异同:
同:两者都是用来取消后台任务的。
异:应用场景不一样,ee.cancel是主动的请求结束后台进程,比如在执行DoWork中的函数时,发现出现异常,需要主动退出该任务,那么此时就可以调用ee.cancel=true来结束任务。如果dowork中执行的是一个循环操作,需要在一定的周期检查外部是否有取消请求,那么此时就读取 CancellationPending 的值,CancellationPending 是只读的,当外部触发CancelAsync时,该值被赋为true.