场景

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

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103254728

在以上流程中取消后台BackgroundWorker时如果是正常流程时会生效,但是会遇到以上情况

就是执行到了DoWork的方法中的循环时,此循环执行时间很长,往往取消了后还会将当前循环执行完。

所以为了彻底取消执行,应该在循环中就执行是否取消的检测,进而跳出循环或者说直接结束当前方法。

注:

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

实现

比如在下面的DoWork方法中

      private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){string errMsg = String.Empty;bool result = false;BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消导出";result =  false;return;}if (e.Cancel){errMsg = "已取消导出";result = false;return;}.....if (this.radioButtonAll.Checked){ExportExcelHelper excleHelper = new ExportExcelHelper();result = excleHelper.exportExcelAll(this.pathTextBox.Text, this.nameTextBox.Text, sender, e, this.checkEdit_Autx.Checked, this.checkEdit_Bms.Checked, out errMsg, AutxDecimalNum, AuvxDecimalNum, BmsDecimalNum);}

虽然已经添加了是否已经取消的处理,但是在此方法中还有调用别的方法exportExcelAll,在别的方法exportExcelAll中有执行的循环的操作。

所以要在当前方法中将sender 和e 作为参数传递给调用的方法。

同时在方法exportExcelAll的最前面也要加上是否取消的处理

        public bool exportExcelAll(String filePath, String fileName, object sender, DoWorkEventArgs e, Boolean needAuxRecord, Boolean needBmsRecord, out string errMsg, int autxDecimalNum, int auvxDecimallNum, int bmsDecimalNum){BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消导出";return false;}if (e.Cancel){errMsg = "已取消导出";return false;}.....for (int i = 0; i < excelTotalCount; i++){//BackgroundWorker bgWorker = sender as BackgroundWorker;if ((bgWorker.CancellationPending == true)){e.Cancel = true;errMsg = "已取消导出";return false;}if (e.Cancel){errMsg = "已取消导出";return false;}}

同理如果在exportExcelAll中有调用的其他的方法和循环也要添加是否取消的处理。

然后在方法的循环中添加对取消的处理。

因为为了防止后台继续执行,即为了不让其执行类似于循环这样的操作,所以应该在循环中进行监控是否取消。进而结束当前循环或者结束当前方法,一般是return  或者return false。

Winform中设置BackgroundWorker在取消时关闭后台进程不生效-没有跳出循环相关推荐

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

    场景 在Winform中拖拽 一个BackgroundWorker控件,配合进度条控件能开启一个后台线程并报告进度条进度. 但是在执行后台线程的任务时,如果想要取消,怎样让其停止执行. 注: 博客主页 ...

  2. Winform中设置ZedGraph的多条Y轴的标题和刻度不显示十次幂

    场景 Winform中设置ZedGraph的坐标轴的标题和刻度不显示十次幂: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/106 ...

  3. Winform中设置ZedGraph鼠标悬浮显示线上的点的坐标并自定义显示的内容

    场景 Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  4. Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题

    场景 Winform中设置ZedGraph鼠标双击获取距离最近曲线上的点的坐标值: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/ ...

  5. Winform中设置ZedGraph的曲线为折线、点折线、散点图

    场景 Winform中设置ZedGraph的曲线为散点图: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102465399 在上 ...

  6. Winform中设置ZedGraph的曲线为散点图

    场景 Winform中设置ZedGraph的曲线符号Symbol以及对应关系: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. 计算机操作系统的加密与恢复,当在 Windows中设置 FIPS 兼容策略时,BitLocker 的恢复密码Windows...

    当在 Windows中设置 FIPS 兼容策略时,BitLocker 的恢复密码Windows 04/15/2021 本文内容 本文讨论由于 BitLocker 的恢复密码与 Windows FIPS ...

  8. Winform中使用FastReport的PictureObject时通过代码设置图片源并使Image图片旋转90度

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  9. Winform中使用FastReport的DesignReport时怎样设置Table的size自动调整

    场景 FastReport安装包下载.安装.去除使用限制以及工具箱中添加控件: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

最新文章

  1. 深入理解Java中为什么内部类可以访问外部类的成员
  2. 线程池的工作原理与源码解读
  3. Python基于nginx访问日志并统计IP访问量
  4. twitter集成第三方登录是窗口一直出现闪退的解决方法
  5. Thinkphp 发送邮件
  6. Linux Shell脚本_设置时区并同步时间
  7. c语言格式对齐填充_C ++中类的大小 课堂上的填充和对齐| 派生类的大小
  8. 2022国内低代码平台厂商排行榜—经典收藏
  9. 一位前辈工程师职业发展的忠告
  10. 轻松部署IE7(下),SMS2003系列之六
  11. VUE:EventHub
  12. jq鼠标隐藏显示的方法
  13. SqlServer查询表名的备注(查询表名描述 MS_Description)
  14. android snackbar 底部,Android KitKat:Snackbar不在屏幕的底部
  15. Keil出现 err:Cannot read project file异常;err:点击Project闪退
  16. Linux 网络基础篇
  17. HPnbsp;Jetdirectnbsp;打印服务器配置
  18. 华为手机怎么连接电脑传输
  19. Win11安卓子系统无法启动怎么办?安卓子系统启用虚拟机平台教程(确保在可选的Windows功能中启用虚拟机平台)
  20. 用Rax开发一个联想搜索输入框,内附封装后的npm组件

热门文章

  1. rocketmq之控制台rocketmq-console编译安装(二)
  2. oracle 安装及工具简介,oracle安装及简介
  3. spring cloud全家桶_阿里架构师玩转spring全家桶(实战篇),附赠3本spring电子书...
  4. qemu debug linux内核,qemu调试linux内核
  5. cad显示有点暗_CAD参照的图框颜色太暗怎么调整?
  6. 过程或函数的副作用是_Python函数和函数式编程(两万字长文警告!一文彻底搞定函数,建议收藏!)...
  7. mysql数据库各表、数据库数据容量查询
  8. 如何提高lstm的预测精度_如何提高示波器的测试精度?五大因素助您了解!
  9. cad lisp 两侧偏移并删除_弱电CAD不算CAD?学学操作,将手速发挥极致,让他人刮目相看...
  10. mysql8.0默认引擎是什么_MySQL8.0新特性【转】