码迷,mamicode.com
首页 > Windows程序 > 详细

c# 异步进度条组件BackgroundWorker

时间:2017-04-09 18:08:09      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:使用   mod   sleep   can   class   中断   string   err   state   

//控件事件调用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 = 0; i < count; i++) { //检查取消 if (worker.CancellationPending) { e.Cancel = true; break; } else { //此处为具体的工作代码
//...
//进度报告 worker.ReportProgress((i
+ 1) * (100 / count), "进度信息"); //线程休眠 Thread.Sleep(500); } } } //进度报告 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

标签:使用   mod   sleep   can   class   中断   string   err   state   

原文地址:http://www.cnblogs.com/janehlp/p/6685637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!