zoukankan      html  css  js  c++  java
  • 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;
                    }
  • 相关阅读:
    SQL语句导入导出大全
    针对SQL INJECTION的SQL SERVER安全设置初级篇
    3389输入法漏洞————入侵动画
    asp的Server对象
    网络安全防范体系及设计原则
    ARP、Tracert、Route 与 NBTStat命令详解
    VC编译器使用Matlab_Com组件的方法
    ASP与ActiveX控件交互实战(二)
    ASP 嵌入式Web视频点播系统实现方法
    在ASP程序设计中在使用Response对象
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/11934935.html
Copyright © 2011-2022 走看看