BackgroundWorker使用总结
要用Background,你必须Import System. ComponentModel 命名空间。
简单调用BackgroundWorker的过程
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork+=new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
ArgClass arg = new ArgClass();
worker.RunWorkerAsync(arg);
public class ArgClass
{
…
}
static void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//获得BackgroundWorker执行结果
Console.WriteLine(e.Result);
}
-------------------------------------------------------
public static void worker_DoWork(object sender, DoWorkEventArgs e)
{
//获得BackgroundWorker调用程序输入的参数
Console.WriteLine((ArgClass)e.Argument);
}
你可以通过ArgClass的参数和 woker_Dowork交互信息。
你可以监视BackgroundWorker工作进度
// WorkerReportsProgress同时支持get,set
worker.WorkerReportsProgress =true
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine(e.ProgressPercentage);
Console.WriteLine(e.UserState);
//添加BackgroundWorker状态改变后的操作
}
-------------------------------------------------------
public static void worker_DoWork(object sender, DoWorkEventArgs e)
{
…
//触发ProgressChanged事件
worker.ReportProgress(15, "Stage1");
}
你可以在调用程序中告诉BackgroundWorker让它撤销操作
// WorkerSupportsCancellation同时支持get,set
worker.WorkerSupportsCancellation = true;
worker.CancelAsync();
-------------------------------------------------------
public static void worker_DoWork(object sender, DoWorkEventArgs e)
{
…
//可以通过CancellationPending得知调用程序是否请求退出
if (worker.CancellationPending == true)
{
//执行退出操作
//告诉调用者我已经退出成功
e.Cancel = true;
}
}