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

发布时间:2024年01月10日
            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.

文章来源:https://blog.csdn.net/qq_42729780/article/details/135499760
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。