关于异步工作 BackgroundWorker的研究
来源:互联网 发布:网络共享文档 编辑:程序博客网 时间:2024/05/22 13:06
// 新建BackgroundWorker实例
backgroundCalculator = new BackgroundWorker();
// 设置可以通知工作进度
backgroundCalculator.WorkerReportsProgress = true;
// 支持取消工作
backgroundCalculator.WorkerSupportsCancellation = true;
// 定义工作线程的方法
backgroundCalculator.DoWork += new DoWorkEventHandler(backgroundCalculator_DoWork);
// 定义通知进度的方法
backgroundCalculator.ProgressChanged += new ProgressChangedEventHandler(backgroundCalculator_ProgressChanged);
// 定义工作完成的方法,一共有三种情况
// 1. 工作成功完成
// 2. 工作发生错误,失败
// 3. 用户
backgroundCalculator.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundCalculator_RunWorkerCompleted);
backgroundCalculator.RunWorkerAsync(参数); // 开始工作,参数传递到执行工作的方法:
void backgroundCalculator_DoWork(object sender, DoWorkEventArgs e)
{
int start = (int) e.Argument; // 获取参数
e.Result = getNextPrimeAsync(start, (BackgroundWorker)sender, e); // 返回工作结果到e(示例是取得下一个素数)
}
private int getNextPrimeAsync(int start, BackgroundWorker worker, DoWorkEventArgs e)
{
int percentComplete = 0;
start++;
while (!isPrime(start))
{
if (worker.CancellationPending) //如果被取消(使用backgroundCalculator.CancelAsync()取消)
{
e.Cancel = true; // 设置该工作被取消
break;
}
else
{
start++;
percentComplete++;
worker.ReportProgress(percentComplete % 100); //通知工作进度,传递参数到ProgressChangedEventArgs的ProgressPercentage量,并执行后面的变更进度方法
}
}
return start;
}
void backgroundCalculator_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
updateProgress(e.ProgressPercentage); //变更进度条的进度,使用上面传递的参数
}
void backgroundCalculator_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{ //方法执行完成,判断工作是否成功完成并执行相应方法
if (e.Cancelled)
{
updateStatus("Cancelled.");
}
else if (e.Error != null)
{
reportError(e.Error);
}
else
{
reportPrime((int)e.Result);
}
calcProgress.Value = 0;
}
总结:
BackgroundWorker使用起来很简单,比起直接新建一个线程来执行工作要方便很多,主要是它各种EventArgs的参数传递使得多线程编程特别简单方便
- 关于异步工作 BackgroundWorker的研究
- BackgroundWorker&&ProgressBar的研究
- 关于异步线程BackgroundWorker类的使用心得
- 关于 BackgroundWorker 的描述
- 异步BackgroundWorker
- C#异步加载数据:BackgroundWorker的使用
- 关于AJAX同步和异步的研究
- 关于Unity资源异步加载的研究
- 关于PHP实现异步操作的研究
- 关于backgroundworker
- BackgroundWorker实现异步
- 多线程异步实现(backgroundworker)
- BackgroundWorker异步更新界面
- C# BackgroundWorker实现WinForm异步操作的例子
- C# BackgroundWorker实现WinForm异步操作的例子
- [原创]一个通过BackgroundWorker实现WinForm异步操作的例子
- C# BackgroundWorker实现WinForm异步操作的例子
- C# BackgroundWorker实现WinForm异步操作的例子
- IE里面的画笔---VML(Vector Markup Language)入门之二
- 我目前在做的jabber项目
- InfoWorld 预测:2006年值得期待的11项创新 (ZT)
- 精彩SQL集锦(一)
- 学习web标准的重要链接大全
- 关于异步工作 BackgroundWorker的研究
- c++的高手们 谢谢帮帮忙 [求助!!!!!!!!!!!!!]
- javacore
- vsftpd的安装实录
- VS.NET 2005 的ClickOnce
- 互联网推广中被滥用了的技术
- Flash Lite 与 J2ME 分析比较
- sql语言特殊字符处理
- 存储过程的规范说明