BackgroundWorker辅助类

2024-12-22  本文已影响0人  小羊爱学习

介绍:

BackgroundWorker是.NET Framework中提供的一个用于简化多线程编程的辅助类,它是一个控件,专门用于执行多线程任务,允许在后台线程中执行耗时的操作,同时保持主线程(通常是用户界面线程)的响应性。

事件与方法:

事件

方法

属性

注意事项

        private BackgroundWorker worker;
        public FrmMain()
        {
            InitializeComponent();
            worker = new BackgroundWorker();
            worker.DoWork += Worker_DoWork;
            worker.ProgressChanged += Worker_ProgressChanged;
            worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
            worker.WorkerReportsProgress = true;

            worker.RunWorkerAsync();// 启动异步操作的方法。调用此方法将触发DoWork事件。
            Debug.WriteLine($"主线程:{Thread.CurrentThread.ManagedThreadId}");
        }

        // 异步操作完成时触发的事件。无论操作是成功完成、被取消还是发生异常,此事件都会被触发
        private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show("异步操作已取消!");
            }
            else if (e.Error != null)
            {
                MessageBox.Show("异步操作发生错误: " + e.Error.Message);
            }
            else
            {
                MessageBox.Show("异步操作已完成!");
            }
        }
        // 报告操作进度的事件
        private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Debug.WriteLine((double)e.ProgressPercentage);
        }
        // 在后台线程上执行耗时操作的事件
        private void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.Sleep(1000);
            Debug.WriteLine($"Worker_DoWork:{Thread.CurrentThread.ManagedThreadId}");
            for (int i = 0; i < 10; i++)
            {
                // 检查是否请求取消
                if (worker.CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
                Thread.Sleep(1000);
                worker.ReportProgress(i);
            }
        }
上一篇 下一篇

猜你喜欢

热点阅读