天天看点

BackgroundWorker实现异步

private void button1_Click(object sender, EventArgs e)

        {

            this.backgroundWorker1.WorkerReportsProgress = true;

            this.backgroundWorker1.WorkerSupportsCancellation = true;

            this.backgroundWorker1.RunWorkerAsync();

            //if (this.backgroundWorker1.IsBusy)

            //{

            //    this.backgroundWorker1.CancelAsync();

            //}

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

        {

            int num = 0;

            for (int i = 0; i < 100; i++)

            {

                if (this.backgroundWorker1.CancellationPending)

                {

                    e.Cancel = true;

                    return;

                }

                this.backgroundWorker1.ReportProgress(i);

                System.Threading.Thread.Sleep(10);

                num += i;

            }

            e.Result = num;

        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            this.label1.Text = "Complete :" + e.ProgressPercentage.ToString();

        }

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            if (e.Cancelled)

            {

                //Console.WriteLine("You cancelled!");

                this.textBox1.Text = "You cancelled!";

            }

            else if (e.Error != null)

            {

                //Console.WriteLine("Worker exception: " + e.Error.ToString());

                this.textBox1.Text = "Worker exception:" + e.Error.Message;

            }

            else

            {

                //Console.WriteLine("Complete - " + e.Result);

                this.textBox1.Text = "Complete - " + e.Result.ToString();

            }// 从 DoWork

        }