.net 2.0 BackgroundWorker类详细用法
注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
- 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;
- namespace WinFormReport
- {
- /*
- * 作者:周公
- * BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长时间等待的情况可以使用这个类。
- * 注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
- * 它有几个属性:
- * CancellationPending——指示应用程序是否已请求取消后台操作。
- * IsBusy——指示 BackgroundWorker 是否正在运行异步操作
- * WorkerReportsProgress——该值指示 BackgroundWorker 能否报告进度更新
- * WorkerSupportsCancellation——该值指示 BackgroundWorker 是否支持异步取消
- * 还有如下事件:
- * DoWork——调用 RunWorkerAsync 时发生。
- * ProgressChanged——调用 ReportProgress 时发生。
- * RunWorkerCompleted——当后台操作已完成、被取消或引发异常时发生。
- *
- * 还有如下方法:
- * CancelAsync——请求取消挂起的后台操作
- * ReportProgress——引发 ProgressChanged 事件
- * RunWorkerAsync——开始执行后台操作
- *
- **/
- public partial class MainForm : Form
- {
- private BackgroundWorker worker = new BackgroundWorker();
- public MainForm()
- {
- InitializeComponent();
- worker.WorkerReportsProgress = true;
- worker.WorkerSupportsCancellation = true;
- //正式做事情的地方
- worker.DoWork += new DoWorkEventHandler(DoWork);
- //任务完称时要做的,比如提示等等
- worker.ProgressChanged += new ProgressChangedEventHandler(ProgessChanged);
- //任务进行时,报告进度
- worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(CompleteWork);
- }
- //调用 RunWorkerAsync 时发生
- public void DoWork(object sender, DoWorkEventArgs e)
- {
- e.Result = ComputeFibonacci(worker, e);//当ComputeFibonacci(worker, e)返回时,异步过程结束
- }
- //调用 ReportProgress 时发生
- public void ProgessChanged(object sender, ProgressChangedEventArgs e)
- {
- this.progressBar1.Value = e.ProgressPercentage;
- }
- //当后台操作已完成、被取消或引发异常时发生
- public void CompleteWork(object sender, RunWorkerCompletedEventArgs e)
- {
- MessageBox.Show("完成!");
- }
- private int ComputeFibonacci(object sender, DoWorkEventArgs e)
- {
- for (int i = 0; i < 1000; i++)
- {
- if (worker.CancellationPending)
- {
- e.Cancel = true;
- return -1;
- }
- else
- {
- int percent = 100 * i / 1000;//计算已完成的百分比
- worker.ReportProgress(percent);
- }
- System.Threading.Thread.Sleep(10);
- }
- return -1;
- }
- private void btnStart_Click(object sender, EventArgs e)
- {
- worker.RunWorkerAsync();
- btnStart.Enabled = false;
- btnPause.Enabled = true;
- }
- private void btnPause_Click(object sender, EventArgs e)
- {
- btnPause.Enabled = false;
- btnStart.Enabled = true;
- worker.CancelAsync();
- }
- }
- }
在此感谢luols指出其中的一个小bug。
.net 2.0 BackgroundWorker类详细用法相关推荐
- C BackgroundWorker类详细说明
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Back ...
- php class类的用法详细总结
以下是对php中class类的用法进行了详细的总结介绍,需要的朋友可以过来参考下 一:结构和调用(实例化): class className{} ,调用:$obj = new className(); ...
- __declspec关键字详细用法
__declspec关键字详细用法 2009-01-21 16:23 __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式.其它的有关存储方式的修饰符如static与ext ...
- wxIntegerValidator< T > 类模板用法
wxIntegerValidator< T > 类模板用法 wxIntegerValidator< T > 类模板用法 用法详细说明 wxIntegerValidator< ...
- java中日历类的用法_java日期类的用法
java日期类的用法 不管你是处理财务交易还是计划着下一步的行动,你都要知道怎样在Java中建立,使用和显示日期.这需要你简单的查阅一下相应类的API参考:一个日期可以创建3个相关类的对象.这篇文章告 ...
- Python控制键盘鼠标pynput的详细用法 (转载)
Python控制键盘鼠标pynput的详细用法 更新时间:2019年01月28日 15:15:16 作者:botoo 这篇文章主要介绍了Python控制键盘鼠标pynput的详细用法,小编觉得挺不 ...
- C# MediaPlayer的详细用法
AxWindowsMediaPlayer的详细用法 作者:龙昊雪 AxWindowsMediaPlayer的详细用法收藏 function StorePage(){d=document;t=d.sel ...
- SerialPort类的用法与示例
SerialPort类的用法与示例 文章目录 SerialPort类的用法与示例 1. 串口硬件信号定义 2. 串口端口号搜索 3. 串口属性参数设置 4. 串口发送信息 5. 串口接收信息 串口工具 ...
- Tomcat 启动闪退问题解决集(八大类详细)
Tomcat启动闪退问题解决集(八大类详细) 本文目录: 一.Java环境不对,Tomcat 不同版本需要的Java环境不同. 二.环境变量没有配置好 三.Tomcat端口被占用 四.配置文件编码问题 ...
最新文章
- 安装Grid Control
- 通过生成器写一个日志调用方法
- pandas用众数填充缺失值_7步搞定数据清洗-Python数据清洗指南
- flash调用js中的方法,让js传递变量给flash (兼容 IE FF) (转)
- 一个通用的makefile写法,自动推导文件的依赖关系
- Python | 查找字符串中每个字符的频率
- swift面向对象之方法
- 如何免费的让网站启用HTTPS
- 电子书下载(强烈推荐):《大道至简——软件工程实践者的思想》
- hdu 4609 3-idiots(FFT计数)
- 【非长篇大论】X3D - Web3D标准的发展
- python爬虫批量下载美女吧美女图片
- mac环境变量配置文件加载优先级
- 联想x3850x6从u盘引导_联想笔记本bios设置u盘启动教程
- 骁龙神经处理引擎(Snapdragon Neural Processing Engine)
- apple configurator 2 获取appstore ipa包
- unity UI 跟随3D物体移动
- java语言简介论文,基于Java的Web论坛开发.doc
- typecpd协议规范 C语言,USB-C(USB Type-C)规范的简单介绍和分析
- Android 打包报 Invalid keystore format