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()+"%";
}