C# 中BackgroundWorker的Dowork内如何实现循环,然后外部中止停掉循环

            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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值