天天看点

C#异步加载数据:BackgroundWorker的使用

 winform开发时,窗口启动的时候要加载大量的数据,或者界面操作要等待很久的时候,界面会出现假死或者卡住的现象。用异步加载数

据可以解决这个问题。

1、异步加载数据:BackgroundWorker的使用:

2、声明一个BackgroundWorker变量:

        DataTable dt = new DataTable();//存放从数据库获取的数据

BackgroundWorker backgroundWorker1 = new BackgroundWorker();

3、在窗口的load事件设置backgroundWorker1 的属性、事件:

backgroundWorker1.DoWork+=new DoWorkEventHandler(backgroundWorker1_DoWork);

backgroundWorker1.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);

backgroundWorker1.WorkerSupportsCancellation = true;//声明可以取消

4、启动:backgroundWorker1.RunWorkerAsync(); //可以传递参数,在DoWork事件中用e.Argument接收参数

5、添加DoWork事件加载数据:

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

        {

            dt = g_netPointDao.QueryNetPointAll();//从数据库获取数据

        }

6、添加RunWorkerCompleted事件,数据加载完后,操作控件赋值:

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

        {

            this.gluNetpoint.Properties.DataSource = dt;//在界面控件绑定数据

            backgroundWorker1.CancelAsync();//取消挂起的后台操作。

        }

7、如果要向用户界面发送信息,则调用BackgroundWorker的ReportProgress方法,它将调用ProgressChanged事件(可以将改变通过object

类型传递);在ProgressChanged事件的响应代码中将改变呈现给用户。

8、滚动条显示的实现:

backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

backgroundWorker1.WorkerReportsProgress = true;//能否报告进度更新

在DoWork事件中:

BackgroundWorker worker = sender as BackgroundWorker;

worker.ReportProgress( 80);//设置百分比

在ProgressChanged事件中:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)

        {

            this.textEdit1.Text = e.ProgressPercentage.ToString()+"%";

        }