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(进度条) ...
随机推荐
- day11hadoop高可用和Hive
PS:视频一直就是在演示 高可用(比较偏运维一点) PS:Active是对外提供服务的,standBy是从属备用的:但是他们是怎样保证同步的数据的呢?一个运行中zookeeper上的第三方那个工具 ...
- C# to IL 4 Keywords and Operators(关键字和操作符)
Code that is placed after the return statement never gets executed. In the first programgiven below, ...
- touch-action 解决移动端300ms延迟问题
CSS3 新属性, touch-action: manipulation; 可以有效的解决移动端300ms延迟的问题 移动端300ms延迟问题一直都是h5APP的痛点, 有很多库或者方法都可以解决, ...
- EnvironmentError: mysql_config not found问题解决(centos7下python安装mysql-python)
centos7下python安装mysql-python模块,执行命令: pip install mysql-python 出现报错:EnvironmentError: mysql_config no ...
- chmod修改权限
1.命令简介 chmod(Change mode) 用来将每个文件的模式更改为指定值.Linux/Unix 的档案调用权限分为三级 : 档案拥有者.群组.其他. u :目录或者文件的当前的用户 g : ...
- Linux paste命令详解
Linux paste命令 Linux paste命令用于合并文件的列.paste指令会把每个文件以列对列的方式,一列列地加以合并 将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分 ...
- SourceInsight宏插件1(非常好用,强力推荐)
对于一直使用sourceinsight编辑C/C++代码的工程师们,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直使用该工具做C/C++开发,sourceinsi ...
- OpenWrt挂载移动硬盘实现脱机下载
一.编译选项选好好usb存储驱动,参考http://www.cnblogs.com/smbx-ztbz/p/4418245.html 并且选上kmod-usb-hid,用于usbhub. 二.编译选项 ...
- Winform 界面全屏 显示状态栏
this.FormBorderStyle = FormBorderStyle.None; this.MaximumSize = new Size(Screen.PrimaryScreen.Workin ...
- Winform 开发基础分层框架
Winform 开发基础分层框架: