Winform中设置BackgroundWorker在取消时关闭后台进程

场景

在Winform中拖拽 一个BackgroundWorker控件,配合进度条控件能开启一个后台线程并报告进度条进度。

但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行。

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

设置可取消为true

将BackgroundWorker控件的WorkerSupportsCancellation属性设置为true。

 

 

这里是直接通过控件设置属性的方式,如果是直接声明的对象,则可以通过对象.属性去设置。

如果不设置则会提示:此BackgroundWorker声明它不支持取消。。。

 

 

发起取消后台操作的请求

在上面允许取消后,在取消按钮的点击事件中发起取消后台操作的请求。

this.backgroundWorker1.CancelAsync();

完整示例代码

 private void btnCancel_Click(object sender, EventArgs e)
        {
            this.backgroundWorker1.CancelAsync();
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

 

真正取消后台操作

上面发起取消后台操作的请求后,并不会真正关闭后台进程,只是报告要取消后台进程。

如果要执行的操作是一个循环则会一直循环完。

在进行后台具体执行的操作时是这样绑定的

this.backgroundWorker1.DoWork += backgroundWorker1_DoWork;
//触发事件
this.backgroundWorker1.RunWorkerAsync();

 

所以要在具体执行后台操作的方法 backgroundWorker1_DoWork中去进行判断并终止

在上面进行请求取消操作后,那么BackgroundWorker对象的CancellationPending属性就为true。

所以在具体执行后台操作的方法中的循环操作中

 

BackgroundWorker bgWorker = sender as BackgroundWorker;
                if ((bgWorker.CancellationPending == true))
                {
                    e.Cancel = true;
                    errMsg = "已取消导出";
                    return false;
                }
                if (e.Cancel)
                {
                    errMsg = "已取消导出";
                    return false;
                }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值