C# BackgroundWorker使用教程

2020-01-05 09:33:58丽君

该事件的RunWorkerCompletedEventArgs参数包含三个常用的属性Error,Cancelled,Result。其中,Error表示在执行异步操作期间发生的错误;Cancelled用于判断用户是否取消了异步操作;Result属性接收来自DoWork事件的DoWorkEventArgs参数的Result属性值,可用于传递异步操作的执行结果。

4、附源代码:

前台

C#,BackgroundWorker

后台


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PrograssBar
{
 public partial class PrograssBarUseBackgroundWorker : Form
 {

 private BackgroundWorker bgWorker = new BackgroundWorker();

 public PrograssBarUseBackgroundWorker()
 {
 InitializeComponent();
 InitializeBackgroundWorker();
 }

 private void InitializeBackgroundWorker()
 {
 bgWorker.WorkerReportsProgress = true;
 bgWorker.WorkerSupportsCancellation = true;
 bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
 bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgessChanged);
 bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_WorkerCompleted);
 }

 private void btnStart_Click(object sender, EventArgs e)
 {
 if (bgWorker.IsBusy)
 return;
 this.progressBar1.Maximum = 100;
 this.btnStart.Enabled = false;
 this.btnStop.Enabled = true;
 bgWorker.RunWorkerAsync("hello");
 }

 public void bgWorker_DoWork(object sender, DoWorkEventArgs e)
 {
 for (int i = 0; i <= 100; i++)
 {
 if (bgWorker.CancellationPending)
 {
 e.Cancel = true;
 return;
 }
 else
 {
 bgWorker.ReportProgress(i,"Working");
 System.Threading.Thread.Sleep(10);
 }
 }
 }

 public void bgWorker_ProgessChanged(object sender, ProgressChangedEventArgs e)
 {
 //string state = (string)e.UserState;//接收ReportProgress方法传递过来的userState
 this.progressBar1.Value = e.ProgressPercentage;
 this.label1.Text = "处理进度:" + Convert.ToString(e.ProgressPercentage) + "%";
 }

 public void bgWorker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
 {
 if(e.Error!=null)
 {
 MessageBox.Show(e.Error.ToString());
 return;
 }
 if (!e.Cancelled)
 this.label1.Text = "处理完毕!";
 else
 this.label1.Text = "处理终止!";

 }

 private void btnStop_Click(object sender, EventArgs e)
 {
 this.btnStart.Enabled = true;
 this.btnStop.Enabled = false;
 bgWorker.CancelAsync();
 }
 }
}