C#【多线程篇】BackgroundWorker类使用总结
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private BackgroundWorker bgWorker = new BackgroundWorker();
public Form1()
{
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);
}
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.label2.Text = "状态:" +state;
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 btnStart_Click_1(object sender, EventArgs e)
{
if (bgWorker.IsBusy)
return;
this.progressBar1.Maximum = 100;
this.btnStart.Enabled = false;
this.btnStop.Enabled = true;
bgWorker.RunWorkerAsync("hello");
}
private void btnStop_Click_1(object sender, EventArgs e)
{
this.btnStart.Enabled = true;
this.btnStop.Enabled = false;
bgWorker.CancelAsync();
}
}
}
非特殊说明,本文版权归原作者所有,转载请注明出处

京公网安备11011502038186号