BackgroundWorker 类允许您在单独的专用线程上运行操作。 耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。 如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。
一、BackgroundWorker 相关生命周期
1.声明BackgroundWorker
2.设置相关操作事件和属性,并开始这个对象
3.执行设置事件(DoWork事件为耗时操作,耗时操作时反馈给UI界面的ProgressChanged事件(Dowork的报告方法引发),
完成DoWork时执行RunWorkerCompleted方法)
4.写相关事件
比如导出excel
1.点击时事件
/// <summary> /// 将数据库数据转换为excel操作 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DbToExcel(object sender, RoutedEventArgs e) { BackgroundWorker bw = new BackgroundWorker(); //创建一个BackgroundWorker线程 bw.WorkerReportsProgress = true; //设置BackgroundWorker可以进行报告更新 bw.DoWork += new DoWorkEventHandler(toExcel); //执行耗时操作 创建一个DoWork事件,并进行报告,指定bw_DoWork方法去做事 bw.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged); //通过报告(数据),进行对UI操作 bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted); //完成操作时响应事件 PartPosition = null; bw.RunWorkerAsync("my url");//开始执行DoWork事件 并传递一个对象 }