BackGroundWorker

帮助使用者进行线程间的交互。具体的数据交流载体就是EventArgs e这个参数。

        BackgroundWorker _backgroundWorker = new BackgroundWorker();
        public Form1()
        {
            InitializeComponent();

            InitBackGroundWorker();
            _backgroundWorker.WorkerReportsProgress = true;
            _backgroundWorker.WorkerSupportsCancellation = true;
            btnStop.Enabled = false;
        }
        private void InitBackGroundWorker()
        {
            _backgroundWorker.DoWork += BW_DoWork;
            _backgroundWorker.ProgressChanged += BW_ProgressChanged;
            _backgroundWorker.RunWorkerCompleted += BW_RunWorkerCompleted;
        }

        private void BW_DoWork(object sender, DoWorkEventArgs e)
        {
            var worker = sender as BackgroundWorker;
            Random r = new Random();
            int nCnt = 0;
            while (worker.CancellationPending == false)
            {
                int num = r.Next(0, 10000);
                if (num % 5 == 0)
                {
                    nCnt++;
                    worker.ReportProgress(0, num);
                    Thread.Sleep(1000);
                }
            }
            e.Result = nCnt;
        }
        private void BW_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            int num = (int)e.UserState;
            txtResult.Text += num + " ";
        }
        private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                txtResult.Text += $"\r\n\r\n操作停止,共生产 {e.Result} 个能被5整除的随机数";
            }
            else
            {
                txtResult.Text += "\r\n\r\nn操作过程中产生错误:" + e.Error;
            }
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            txtResult.Text = "开始产生10000以内的随机数......\r\n";
            btnStart.Enabled = false;
            btnStop.Enabled = true;
            _backgroundWorker.RunWorkerAsync();
        }
        private void btnStop_Click(object sender, EventArgs e)
        {
            _backgroundWorker.CancelAsync();
            btnStart.Enabled = true;
            btnStop.Enabled = false;
        }

posted @ 2019-11-26 20:20  wesson2019  阅读(88)  评论(0编辑  收藏  举报