首页 > 代码库 > c# 异步进度条组件BackgroundWorker
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 = 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。