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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值