这也是今天讨论的话题。取消是默认就支持的,而暂停则默认不支持。但通过ManualResetEvent可以对其进行干预。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace BackgroundWorkderPauseSample
{public partial class MainForm : Form{BackgroundWorker worker = null;public MainForm(){InitializeComponent();Load += new EventHandler(Form1_Load);}void Form1_Load(object sender, EventArgs e){worker = new BackgroundWorker();worker.WorkerReportsProgress = true;worker.WorkerSupportsCancellation = true;worker.DoWork += new DoWorkEventHandler(worker_DoWork);worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);}void worker_ProgressChanged(object sender, ProgressChangedEventArgs e){progressBar1.Value = e.ProgressPercentage;}void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){if (e.Cancelled)MessageBox.Show("用户取消了操作");else{MessageBox.Show("正常完成了操作");}}void worker_DoWork(object sender, DoWorkEventArgs e){for (int i = 0; i < 100; i++){if (worker.CancellationPending)//如果用户申请取消{for (int k = i; k >= 0; k--){Thread.Sleep(10);worker.ReportProgress(k);//模拟一个回滚的效果}e.Cancel = true;return;}manualReset.WaitOne();//如果ManualResetEvent的初始化为终止状态(true),那么该方法将一直工作,直到收到Reset信号。然后,直到收到Set信号,就继续工作。//反之亦然Thread.Sleep(500);worker.ReportProgress(i+1);}}private void btStart_Click(object sender, EventArgs e){worker.RunWorkerAsync();}private void btCancel_Click(object sender, EventArgs e){worker.CancelAsync();}private ManualResetEvent manualReset = new ManualResetEvent(true);private void btPause_Click(object sender, EventArgs e){if (btPause.Text == "暂停"){manualReset.Reset();//暂停当前线程的工作,发信号给waitOne方法,阻塞btPause.Text = "继续";}else{manualReset.Set();//继续某个线程的工作btPause.Text = "暂停";}}}
}
这个程序运行的效果大致如下
一。正常状态
 
二。暂停状态

三。恢复状态

作为演示,代码比较简单,没有对worker的一些状态进行判断以及按钮相应的设置。仅供参考

支持取消操作和暂停操作的Backgroundworker相关推荐

  1. IOS开发教程第一季之03多线程day3--最大并发数,队列的暂停,取消和恢复、操作优先级、线程监听、多线程下UITableView显示图片案例

    1.NSOperation–最大并发数 什么是并发数 同时执行的任务数,比如同时开3个线程执行3个任务,并发数就是3 最大并发数的相关方法 -(NSInteger)maxConcurrentOpera ...

  2. 用python操作浏览器的三种方式_python的webbrowser模块支持对浏览器进行一些操作...

    python 的 webbrowser 模块支持对浏览器进行一些操作 主要有以下三个方法: webbrowser.open(url, new=0, autoraise=True) webbrowser ...

  3. sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务

    请仔细分析这句话 : 是普通的insert 语句,还是在存储过程中的insert语句呢?如果是存储过程中的语句,可能是因为:sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的 ...

  4. ps3 iso安装linux,索尼面临巨额赔款:因取消PS3安装Linux操作系统功能

    索尼面临巨额赔款:因取消PS3安装Linux操作系统功能 2016-06-22 08:57:58来源:游戏下载编辑:评论(0) PS3上市初期时附带安装Linux操作系统的功能,有一部分玩家正是为此功 ...

  5. 我使用Asp.net MVC WebAPI支持OData协议进行分页操作的笔记(第一篇)

    OData协议.多么牛B的技术. 传统的分页写习惯了,最近项目中,用到了 Asp.net WebAPI 2.0来做数据交互接口.至于为什么要使用WebAPI,我想只要是对OData协议有了解的朋友.只 ...

  6. 计算机关闭更新配置win10,windows10取消自动更新怎么操作_win10怎样取消自动更新...

    相信许多用户已经把系统升至windows10系统了,那么使用windows10的用户应该都会遇到电脑自动更新的情况.电脑自动更新会使电脑变得卡顿,遇到这种情况我想应该让很多用户感到困惑,那么win10 ...

  7. win10连接文件服务器记住密码如何删除,win10共享文件夹取消访问密码怎么操作...

    相信大家都有使用win10系统共享过文件,有的用户就会发现每次共享都要输入密码非常麻烦.那么win10无密码访问共享目录方法是什么大家知道吗?我们不仅需要在共享的电脑进行设置,还要再访问文件的电脑也进 ...

  8. ios基础篇(十四)—— 操作依赖、操作缓存池

    一.NSOperation VS GCD GCD GCD是iOS4.0 推出的,主要针对多核cpu做了优化,是C语言的技术 GCD是将任务(block)添加到队列(串行/并行/全局/主队列),并且以同 ...

  9. DOM操作 (创建、增、删、改、查、属性操作、事件操作)

    关于dom操作,我们主要针对于元素的操作.主要有创建.增.删.改.查.属性操作.事件操作. 1.创建 1.document.write 2.innerHTML 3.createElement 2.增加 ...

最新文章

  1. 多项NLP任务新SOTA,Facebook提出预训练模型BART​
  2. Cobbler部署指南之Cobbler安装操作系统篇
  3. eclipse打开,莫名报一堆错(Syntax error on tokens, delete these tokens )
  4. Cryptohack-RSA writeups
  5. vim编写代码时,文件末尾会多一个换行符的解决办法
  6. Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
  7. 颜宁问4对科研夫妻:男女搭配,如何不累?
  8. Redis系统管理相关指令简介
  9. oracle中job无法正常运行,如何排查
  10. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_5_File类获取功能的方法...
  11. 326.是否为3的平方根 IsPowerOfThree
  12. Linux安装gcc方法(超简单安装)
  13. html仿win10第一次开机效果,纯 HTML/CSS 高仿 Win10 加载动画
  14. android 信号研究(包括信号图标和信号优化)
  15. vue的provide和inject特性
  16. 单目视觉技术、双目视觉技术、多目视觉技术
  17. 伤感日志:眼泪是什么颜色,什么味道
  18. 电商上行大势已定,店宝宝扶持新手开展网店创业
  19. 最新美团面试集合(一面+二面+三面+重点技术面试题)附面试解析
  20. ICS大作业--程序人生

热门文章

  1. 适配器模式(三种)简单使用
  2. hdu2159 FATE
  3. 利用单片机快速实现家庭智能控制平台
  4. mysql开启binlog
  5. Error writing file '/tmp/...' (Errcode: 28)
  6. PL/SQL基础篇4(游标)
  7. X3650M3 客户端联不上加密狗!
  8. 上海世博会信息化的8大看点
  9. Eclipse关联JDK源码
  10. 使用JSARToolKit5 开发AR应用 (2) Marker