c# 异步进度条组件BackgroundWorker
//控件事件调用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的更多相关文章
- 【Android 应用开发】 自定义 圆形进度条 组件
转载著名出处 : http://blog.csdn.net/shulianghan/article/details/40351487 代码下载 : -- CSDN 下载地址 : http://down ...
- 手把手教你实现一个 Vue 进度条组件!
最近在个人的项目中,想对页面之间跳转的过程进行优化,想到了很多文档或 npm 等都用到的页面跳转进度条,于是便想自己去实现一个,特此记录. 来看下 npm 搜索组件时候的效果: so 下面咱们一起动手 ...
- 详解Bootstrap进度条组件
在网页中,进度条的效果并不少见,如:平分系统.加载状态等,进度条组件使用了css3的transition和animation属性来完成一些特效,这些特效在IE9及IE9以下版本.Firefox的老版本 ...
- winform异步进度条LongTime
winform异步进度条LongTime,运用到回调函数 定义事件的参数类: namespace LongTime.Business { // 定义事件的参数类 public class ValueE ...
- 数字进度条组件NumberProgressBar
数字进度条组件NumberProgressBar NumberProgressBar是一款数字进度条组件.它不仅可以通过进度条的变化展现进度,还可以通过跟随文字精确表示进度值.开发者可以对进度条进行 ...
- vue 的进度条组件
先看效果: 要想实现如上图的,进度跳效果,有两种方式,首先介绍第一种: 1.自己用 div 写一个,代码如下 <template> <div class="mfc-slid ...
- progressbar进度条组件
Progressbar 进度条组件 通过$.fn.progressbar.fn.defaults重写默认的defaults进度条(progressbar)提供了一种显示长时间操作进度的反馈.进度可被更 ...
- 【progress】 进度条组件说明
progress 进度条组件 原型: <progress percent="[Float(0-100)]" show-info="[Boolean]" b ...
- 第一百九十八节,jQuery EasyUI,ProgressBar(进度条)组件
jQuery EasyUI,ProgressBar(进度条)组件 学习要点: 1.加载方式 2.属性列表 3.事件列表 4.方法列表 本节课重点了解 EasyUI 中 ProgressBar(进度条) ...
随机推荐
- url和资源的再理解
元数据管理系统中, 确实是所有的静态资源都放在WebContent 不在dgs这个主项目中,通过url访问了 下面的这个项目在dgs中
- Android 工具视频学习笔记_WDS
1. 由于Android源码过于庞大,SourceInsight会经常卡死,不适合了.适合的是Android Studio, 非常好用.使用手册上有介绍如何安装. 编译安卓的过程说明手册中也有. 3. ...
- 13机器学习实战之PCA(1)
降维技术 对数据进行降维有如下一系列的原因: 使得数据集更容易使用 降低很多算法的计算开销 去除噪音 使得结果易懂 在以下3种降维技术中, PCA的应用目前最为广泛,因此本章主要关注PCA. 主成分分 ...
- qq互联php版本
https://zhidao.baidu.com/question/1495432442326804379.html qq互联php版本 http://www.jb51.net/article/104 ...
- Oracle12C版本安装步骤
一.下载路径 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html file1,file ...
- adb command
- Spring技术内幕总结 - IoC容器的实现
IoC:Inversion of Control,控制反转,即依赖对象的获得被反转了(DI:dependency inversion,依赖注入)在Spring中,IoC容器是实现这个模式的载体.它可以 ...
- secureCRT 设置证书免密登陆
1 第一步 2 第二步 3 第三步 4 第4 步 ,然后选择你的 私钥文件
- ASP.NET AJAX入门系列(3):使用ScriptManagerProxy控件
在ASP.NET AJAX中,由于一个ASPX页面上只能有一个ScriptManager控件,所以在有母版页的情况下,如果需要在Master-Page和Content-Page中需要引入不同的脚本时, ...
- Visual Studio 2010 出现关于ActivityLog.xml错误的解决方案
在用VS编写程序是第一次会跳出“Visual Studio has encountered an exception.This may be caused by an extension. You c ...