BackgroundWorker BgWorker = new BackgroundWorker();
BackgroundWorker BgWorker = new BackgroundWorker();
/* WorkerReportsProgress
bool类型,指示BackgroundWorker是否可以报告进度更新。
当该属性值为True是,将可以成功调用ReportProgress方法,否则将引发InvalidOperationException异常。 */
BgWorker.WorkerReportsProgress = true;
/* WorkerSupportsCancellation
bool类型,指示BackgroundWorker是否支持异步取消操作。
当该属性值为True是,将可以成功调用CancelAsync方法,否则将引发InvalidOperationException异常。*/
BgWorker.WorkerSupportsCancellation = true;
BgWorker.DoWork += BgWorker_DoWork;
/*
DoWork
用于承载异步操作。当调用BackgroundWorker.RunWorkerAsync()时触发。
需要注意的是,由于DoWork事件内部的代码运行在非UI线程之上,所以在DoWork事件内部应避免于用户界面交互,
而于用户界面交互的操作应放置在ProgressChanged和RunWorkerCompleted事件中。
*/
BgWorker.ProgressChanged += BgWorker_ProgressChanged;
/*
* ProgressChanged
当调用BackgroundWorker.ReportProgress(int percentProgress)方式时触发该事件。
该事件的ProgressChangedEventArgs.ProgressPercentage属性可以接收来自ReportProgress方法传递的percentProgress参数值,
ProgressChangedEventArgs.UserState属性可以接收来自ReportProgress方法传递的userState参数。
*
* */
BgWorker.RunWorkerCompleted += BgWorker_RunWorkerCompleted;
/*
RunWorkerCompleted
异步操作完成或取消时执行的操作,当调用DoWork事件执行完成时触发。
该事件的RunWorkerCompletedEventArgs参数包含三个常用的属性Error,Cancelled,Result。
其中,Error表示在执行异步操作期间发生的错误;
Cancelled用于判断用户是否取消了异步操作;
Result属性接收来自DoWork事件的DoWorkEventArgs参数的Result属性值,可用于传递异步操作的执行结果。
*/
base.Closed += WinProgress_Closed;
/* IsBusy
bool类型,指示BackgroundWorker是否正在执行一个异步操作。
此属性通常放在BackgroundWorker.RunWorkerAsync()方法之前,避免多次调用RunWorkerAsync()方法引发异常。
当执行BackgroundWorker.RunWorkerAsync()方法是,该属性值将变为True。
*/
if (!BgWorker.IsBusy)
{
/* RunWorkerAsync() 开始执行一个后台操作。
调用该方法后,将触发BackgroundWorker.DoWork事件,并以异步的方式执行DoWork事件中的代码。 */
BgWorker.RunWorkerAsync();
}