支持取消操作和暂停操作的Backgroundworker
这也是今天讨论的话题。取消是默认就支持的,而暂停则默认不支持。但通过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相关推荐
- IOS开发教程第一季之03多线程day3--最大并发数,队列的暂停,取消和恢复、操作优先级、线程监听、多线程下UITableView显示图片案例
1.NSOperation–最大并发数 什么是并发数 同时执行的任务数,比如同时开3个线程执行3个任务,并发数就是3 最大并发数的相关方法 -(NSInteger)maxConcurrentOpera ...
- 用python操作浏览器的三种方式_python的webbrowser模块支持对浏览器进行一些操作...
python 的 webbrowser 模块支持对浏览器进行一些操作 主要有以下三个方法: webbrowser.open(url, new=0, autoraise=True) webbrowser ...
- sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的操作。请回滚该事务
请仔细分析这句话 : 是普通的insert 语句,还是在存储过程中的insert语句呢?如果是存储过程中的语句,可能是因为:sqlserver存储过程报错:当前事务无法提交,而且无法支持写入日志文件的 ...
- ps3 iso安装linux,索尼面临巨额赔款:因取消PS3安装Linux操作系统功能
索尼面临巨额赔款:因取消PS3安装Linux操作系统功能 2016-06-22 08:57:58来源:游戏下载编辑:评论(0) PS3上市初期时附带安装Linux操作系统的功能,有一部分玩家正是为此功 ...
- 我使用Asp.net MVC WebAPI支持OData协议进行分页操作的笔记(第一篇)
OData协议.多么牛B的技术. 传统的分页写习惯了,最近项目中,用到了 Asp.net WebAPI 2.0来做数据交互接口.至于为什么要使用WebAPI,我想只要是对OData协议有了解的朋友.只 ...
- 计算机关闭更新配置win10,windows10取消自动更新怎么操作_win10怎样取消自动更新...
相信许多用户已经把系统升至windows10系统了,那么使用windows10的用户应该都会遇到电脑自动更新的情况.电脑自动更新会使电脑变得卡顿,遇到这种情况我想应该让很多用户感到困惑,那么win10 ...
- win10连接文件服务器记住密码如何删除,win10共享文件夹取消访问密码怎么操作...
相信大家都有使用win10系统共享过文件,有的用户就会发现每次共享都要输入密码非常麻烦.那么win10无密码访问共享目录方法是什么大家知道吗?我们不仅需要在共享的电脑进行设置,还要再访问文件的电脑也进 ...
- ios基础篇(十四)—— 操作依赖、操作缓存池
一.NSOperation VS GCD GCD GCD是iOS4.0 推出的,主要针对多核cpu做了优化,是C语言的技术 GCD是将任务(block)添加到队列(串行/并行/全局/主队列),并且以同 ...
- DOM操作 (创建、增、删、改、查、属性操作、事件操作)
关于dom操作,我们主要针对于元素的操作.主要有创建.增.删.改.查.属性操作.事件操作. 1.创建 1.document.write 2.innerHTML 3.createElement 2.增加 ...
最新文章
- 多项NLP任务新SOTA,Facebook提出预训练模型BART​
- Cobbler部署指南之Cobbler安装操作系统篇
- eclipse打开,莫名报一堆错(Syntax error on tokens, delete these tokens )
- Cryptohack-RSA writeups
- vim编写代码时,文件末尾会多一个换行符的解决办法
- Python【算法中心 03】Docker部署Django搭建的Python应用流程实例(Docker离线安装配置+Django项目Docker部署)
- 颜宁问4对科研夫妻:男女搭配,如何不累?
- Redis系统管理相关指令简介
- oracle中job无法正常运行,如何排查
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_5_File类获取功能的方法...
- 326.是否为3的平方根 IsPowerOfThree
- Linux安装gcc方法(超简单安装)
- html仿win10第一次开机效果,纯 HTML/CSS 高仿 Win10 加载动画
- android 信号研究(包括信号图标和信号优化)
- vue的provide和inject特性
- 单目视觉技术、双目视觉技术、多目视觉技术
- 伤感日志:眼泪是什么颜色,什么味道
- 电商上行大势已定,店宝宝扶持新手开展网店创业
- 最新美团面试集合(一面+二面+三面+重点技术面试题)附面试解析
- ICS大作业--程序人生