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(进度条) ...
随机推荐
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...
- 依赖注入的方式测试ArrayList和LinkedList的效率(对依赖注入的再次理解)
9/20 号再进行学习 在C++中,main函数尽可能的简单,只要调用子函数的一句话就实现了功能. java开发中,controller就相同于是main函数,其他类的方法不在本类中时候, 1.可以用 ...
- MySQL Innodb Engine --独立表空间参数(innodb_file_per_table)
MySQL中参数innodb_file_per_table决定将表存放于ibdata*的共享表空间还是独立的.ibd文件的独立表空间. ================================ ...
- 使用Managed Extensibility Framework方便的扩展应用程序
概述 Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)以及Duck Typing等.MEF为开发 ...
- ML(1)——机器学习简述
简述 机器学习是人工智能的一种实现方式:深度学习是一种实现机器学习的技术,或者说是一种特殊的机器学习方法,可以说广义上的机器学习也包括了深度学习,三者的关系如下图所示: 从判别垃圾邮件到无人驾驶技术, ...
- js检测字符串的字节数
在js中字符串可以存放数字,字母或者汉字,但是又一个问题就是,数字和字母都是占一个字节,而一个汉字占2个字节.如果在一个字符串中既有字母又有汉字怎么判断字节数呢 第一种简单粗暴 var str = ' ...
- DefinePlugin插件
这个插件允许你创建全局常量用于编译时解析.如果设置mode:"production",webpack默认会设置"process.env.NODE_ENV": J ...
- bzoj 4660 Crazy Rabbit——LIS解决“相交”限制的思想
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4660 想到一个点可以用它与圆的两个切点表示.并想到可以把切点极角排序,那么就变成环上的一些区 ...
- py-day2 python 列表
1.列表的基本格式: 2.列表中可以嵌套任何类型: 中括号括起来.逗号分割每个元素. 列表中的元素可以是:数字/字符串/列表/布尔值 等等,所有的都能放进去. 集合内部可以放置任何东西. 3.通过索引 ...
- B/S和C/S结构的区别
概念: C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境 ...