• 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
  • 相关阅读:
    ci 框架 报错级别 调整
    首页流氓广告的一种实现方法
    php中实现中文字符串的反转
    vmware 1021 错误解决 win7 64位
    isset 判断为POST信息是否为空 (笔记,持续更新)
    windows 下 ci 框架 命令行模式(cli)的使用
    ci 框架 excel 上传失败的处理
    php 日期处理(不断更新)
    svn的本地密码文件处理
    rpmdb open failed 的解决办法
  • 原文地址:https://www.cnblogs.com/janehlp/p/6685637.html
Copyright © 2020-2023  润新知