做项目的时候需要在生成一份Word文档的时候保证界面不假死,同时要有进度条显示。 网上找了些异步线程的方法,如MethodInvoker及其他代理类的BeginInvoke方法,但是看得不是很明白,用起来发现进度条可以显示,但是界面还是呈呆滞状。 后来发现VS里面有一个BackgroundWorker的组件,刚好是用来解决这个问题的。十分方便。 基本来说,只需要在界面中添加上这个组件。简单的设计几步就可以完成在费时操作下界面仍旧相应的任务了。下面主要说一下BackgroundWorker需要设置的属性和事件。 1.DoWork事件 在这个事件的处理函数中运行后台所需要进行的费时操作。 附响应函数形式:
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
2.RunWorkerCompleted事件 在这个事件的处理函数中进行费时操作完成后的处理。 3.ProgressChanged事件 如果需要用到进度条,就在这里面进行响应。这个事件由BackgroundWorker类的ReportProgress函数触发。这个函数接受一个参数(0,100)的一个int类型,就是进度条当前应当指示的位置。如果需要用进度条的话还需要设置WorkerReportsProgress为true。 响应函数设置好之后,在响应用户的函数(比如点击按钮)中用bgWorker.RunWorkerAsync()来触发DoWork事件。RunWorkerAsync函数可以有参数。参数在DoWork响应函数中用e.Argument来访问。