BackgroundWorker类似于线程,但又不太一样,因为线程不可以直接更新界面,而BackgroundWorker可以。代码如下
private void buttonTest_Click(object sender, EventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += Bw_DoWork;
worker.ProgressChanged += Bw_ProgressChanged;
worker.RunWorkerAsync();
}
private void Bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
labelProcess.Text = e.ProgressPercentage.ToString();
}
private void Bw_DoWork(object sender, DoWorkEventArgs e)
{
var worker = sender as BackgroundWorker;
for (int i = 0; i < 100; i++)
{
worker.ReportProgress(i);
Thread.Sleep(100);
}
}
结果如下图