http://www.jb51.net/article/48823.htm

这篇文章主要介绍了c#异步操作后台运行(backgroundworker类)示例,需要的朋友可以参考下

c#异步操作,BackgroundWorker类的使用,可以在后台运行需要的代码逻辑。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace TestBackgroundWork {    

  public partial class Form1 : Form     {

        public Form1()         {            

    InitializeComponent();            

    InitializeBackgoundWorker();        

      }

   

       private BackgroundWorker backgroundWorker1;

        private void InitializeBackgoundWorker()         {            

     this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();            

    this.backgroundWorker1.WorkerReportsProgress = true;            

    this.backgroundWorker1.WorkerSupportsCancellation = true;            

    this.backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);

    this.backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
        }

 

   //**********backgroundWorker1的回调函数**********        

  void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)         {           

    BackgroundWorker worker = sender as BackgroundWorker;          

     for (int i = 1; i <= 10; i++)             {                

     if (worker.CancellationPending)                

     {                   

       e.Cancel = true;                

     }                

    else                 {                    

      Thread.Sleep(500);                   

        int percentComplete = (int)((float)i / (float)10 * 100);                    

       worker.ReportProgress(percentComplete);                

      }            

     }        

  }

        void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)         {           

      this.progressBar1.Value = e.ProgressPercentage;        

   }

        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)         {         

      if (e.Error != null)             {                 MessageBox.Show(e.Error.Message);             }           

    else if (e.Cancelled)             {                 resultLabel.Text = "Canceled";             }          

     else             {                 resultLabel.Text = "Completed";             }        

       startBtn.Enabled = true;            

     stopBtn.Enabled = false;      

     }

 

        //**********backgroundWorker1的回调函数**********

        private void startBtn_Click(object sender, EventArgs e)         {          

          resultLabel.Text = String.Empty;            

          this.startBtn.Enabled = false;            

          this.stopBtn.Enabled = true;             //启动异步操作.            

          backgroundWorker1.RunWorkerAsync();         }

 

        private void stopBtn_Click(object sender, EventArgs e)        

      {             backgroundWorker1.CancelAsync();         }    

      }

}