BackgroundWorker类的案例
public partial class MainWindow : Window
{
BackgroundWorker bgWorker = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
//设置属性
bgWorker.WorkerReportsProgress = true;//是否汇报进程
bgWorker.WorkerSupportsCancellation = true;//是否支持取消。
//链接BackgroundWorker的事件处理程序。
bgWorker.DoWork += DoWork_Handle;
bgWorker.ProgressChanged += ProgressChanged_Handle;
bgWorker.RunWorkerCompleted += RunWorkerCompleted_Handle;
}
private void btnProcess_Click(object sender, RoutedEventArgs e)
{
if (!bgWorker.IsBusy)
{
bgWorker.RunWorkerAsync();
}
}
private void btnCancel_Click(object sender, RoutedEventArgs e)
{
bgWorker.CancelAsync();
}
private void DoWork_Handle(object sender,DoWorkEventArgs args)
{
BackgroundWorker worker = sender as BackgroundWorker;//显示的转换给定类型。
for (int i = 0; i <=10; i++)
{
if (worker.CancellationPending)
{
args.Cancel = true;
break;
}
else
{
worker.ReportProgress(i * 10);
Thread.Sleep(500);
}
}
}
private void ProgressChanged_Handle(object sender, ProgressChangedEventArgs args)
{
progressBar.Value = args.ProgressPercentage;
}
private void RunWorkerCompleted_Handle(object sender,RunWorkerCompletedEventArgs args)
{
progressBar.Value = 0;
if (args.Cancelled)
{
MessageBox.Show("Process was Canceled", "Process Cancelled");
}
else
{
MessageBox.Show("Process was Completed", "Process Completed");
}
}
}
1、调用RunWorkerAsync()方法会触发DoWork事件。
2、调用worker.ReportProgress(i * 10)方法会触发ProgressChanged事件
3、调用CancelAsync()方法会触发RunWorkerCompleted事件(当进度完成时也会触发该事件)

浙公网安备 33010602011771号