//控件事件调用DoWork()方法就行。

#region 进度条
private BackgroundWorker worker = null; private void DoWork(string outfile)
{
//显示进度条
ProgressForm progressForm = new ProgressForm();
progressForm.TopMost = true;
progressForm.Show(this); //准备进度条的记数
worker = new BackgroundWorker();
//指定提供进度通知
worker.WorkerReportsProgress = true;
//提供中断功能
worker.WorkerSupportsCancellation = true;
//线程的主要功能是处理事件
//开启线程执行工作
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
// Specify the function to use to handle progress
//指定使用的功能来处理进度
worker.ProgressChanged += new ProgressChangedEventHandler(progressForm.OnProgressChanged);
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
//进度条结束完成工作
//1.工作完成
//2.工作错误异常
//3.取消工作
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(progressForm.OnProcessCompleted);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
//如果进度条需要参数
//调用System.ComponentModel.BackgroundWorker.RunWorkerAsync
//传入你的参数至System.ComponentModel.BackgroundWorker.DoWork
//提取参数
//System.ComponentModel.DoWorkEventArgs.Argument worker.RunWorkerAsync(outfile);
} //单线程执行工作
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
worker_Doing((BackgroundWorker)sender, e);
}
catch (Exception ex)
{
//此处为异常处理,不能放到worker_Doing内部
e.Result = ex;
}
} //进行工作
private void worker_Doing(BackgroundWorker worker, DoWorkEventArgs e)
{
string outfile = e.Argument as string; //传入参数
int count = 500;
for (int i = ; i < count; i++)
{
//检查取消
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
else
{
//此处为具体的工作代码
//...

//进度报告
worker.ReportProgress((i + ) * ( / count), "进度信息");
//线程休眠
Thread.Sleep(); } } } //进度报告
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//此处可在窗口显示进度信息
//e.UserState as string
//...
} //工作完成状态
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
string message = "";
if (e.Error != null)
{
message = e.Error.Message;
MessageBox.Show(this, message, "异常");
}
else if (e.Cancelled)
{
message = "操作被取消。";
MessageBox.Show(this, message, "提示");
}
else
{
if (e.Result == null)
{
message = "完成。";
MessageBox.Show(this, message, "信息");
}
else
{
message = (e.Result as Exception).Message;
MessageBox.Show(this, message, "异常");
}
} //此处代码为完成后的处理工作
//...
}
#endregion

c# 异步进度条组件BackgroundWorker的更多相关文章

  1. 【Android 应用开发】 自定义 圆形进度条 组件

    转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...

  2. 手把手教你实现一个 Vue 进度条组件!

    最近在个人的项目中,想对页面之间跳转的过程进行优化,想到了很多文档或 npm 等都用到的页面跳转进度条,于是便想自己去实现一个,特此记录. 来看下 npm 搜索组件时候的效果: so 下面咱们一起动手 ...

  3. 详解Bootstrap进度条组件

    在网页中,进度条的效果并不少见,如:平分系统.加载状态等,进度条组件使用了css3的transition和animation属性来完成一些特效,这些特效在IE9及IE9以下版本.Firefox的老版本 ...

  4. winform异步进度条LongTime

    winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...

  5. 数字进度条组件NumberProgressBar

     数字进度条组件NumberProgressBar NumberProgressBar是一款数字进度条组件.它不仅可以通过进度条的变化展现进度,还可以通过跟随文字精确表示进度值.开发者可以对进度条进行 ...

  6. vue 的进度条组件

    先看效果: 要想实现如上图的,进度跳效果,有两种方式,首先介绍第一种: 1.自己用 div 写一个,代码如下 <template> <div class="mfc-slid ...

  7. progressbar进度条组件

    Progressbar 进度条组件 通过$.fn.progressbar.fn.defaults重写默认的defaults进度条(progressbar)提供了一种显示长时间操作进度的反馈.进度可被更 ...

  8. 【progress】 进度条组件说明

    progress 进度条组件 原型: <progress percent="[Float(0-100)]" show-info="[Boolean]" b ...

  9. 第一百九十八节,jQuery EasyUI,ProgressBar(进度条)组件

    jQuery EasyUI,ProgressBar(进度条)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 ProgressBar(进度条) ...

随机推荐

  1. Yocto学习笔记

    1. 指定SRCREV的例子 #kernel-module-m8887-wlan.bb DESCRIPTION = "Marvell M8887 Wifi kernel module&quo ...

  2. 续drone 1.0 新界面调整

    接以前的内容,drone 最新发布的版本又有界面信息的调整了,更方便了. 环境准备 docker-compose 文件 version: '3' services: drone-server: ima ...

  3. python基础教程_学习笔记9:抽象

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/30745465 抽象 懒惰即美德. 抽象和结构 抽 ...

  4. 微信编辑器 wxEditor 最牛逼的富文本编辑器

    时尚最牛逼的富文本编辑器 http://wxeditor.leipi.org/ http://www.wwei.cn/

  5. mysql——创建索引、修改索引、删除索引的命令语句

    查看表中已经存在 index:show index from table_name; 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER ...

  6. day8 大纲

    01 昨日内容回顾 文件操作 文件操作的流程: 1,打开文件创建文件句柄. 2,对文件句柄进行操作. 3,关闭文件句柄. 读, r r+ rb r+b read() 全部读取 read(n) 读取一部 ...

  7. day5 大纲

    01 昨日内容回顾 list: 增: append insert(index,object) extend() 迭代着追加 删: pop(默认删除最后一个)按照索引去删除 有返回值 remove 按照 ...

  8. Grid Virtual Server 和 网格计算

    Grid Virtual Server 的 Virtual Server 源于 LVS (Linux Virtual Server) , LVS 的意思就是把 多个 Linux 服务器 联合起来构成一 ...

  9. git merge 和 git merge --no-ff

    根据这张图片可以看出 git merge –no-ff 可以保存你之前的分支历史.能够更好的查看 merge历史,以及branch 状态. git merge 则不会显示 feature,只保留单条分 ...

  10. linux centos6 yum 安装lamp

    centos 6.5 1.yum安装和源代码编译在使用的时候没啥区别,但是安装的过程就大相径庭了,yum只需要3个命令就可以完成,源代码需要13个包,还得加压编译,步骤很麻烦,而且当做有时候会出错,源 ...