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事件(当进度完成时也会触发该事件)

posted @ 2022-02-14 17:41  跨界专家  阅读(28)  评论(0)    收藏  举报