就这样,BackgroundWorker进行后台运算并和主线程界面进行通信,直到后台任务完成或被中断。
对于一个友好的程序,当后台工作完成后,还应该给用户以提示工作已经完成。这项工作可以通过在BackgroundWorker的OnRunWorkerCompleted事件中添加代码或为其设置委托方法来完成。OnRunWorkerCompleted事件的委托方法形式为【函数名(objectsender, RunWorkerCompletedEventArgse)】。backgroundworker前面说过DoWork事件的委托方法的参数DoWorkEventArgse中有一个属性Result用于保存运算结果,这个属性的值会在后台运算完成后自动传到OnRunWorkerCompleted事件的委托方法中,从而传给前台线程进行显示。需要注意的是,应该在该方法中判断线程结束的原因[完成后台操作/取消后台操作/发生异常错误],只有成功完成后台操作的情况下才能使用e.Result;如果e.Cancel==true或者e.Error!=null就不能使用e.Result,否则会引发“System.InvalidOperationException”类型的异常。
BackgroundWorker还提供了CancelAsync方法允许用户手动终止后台任务,正常使用该方法的前提是WorkerSupportsCancellation属性为true。
至此,关于BackgroundWorker的介绍基本介绍完毕了,希望能给您带来帮助!下面给出一个小例子,展示了BackgroundWorker类的基本使用。
namespace BackgroundWorkerTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
backgroundWorker1.WorkerReportsProgress = true;//报告完成进度
backgroundWorker1.WorkerSupportsCancellation =true;//允许用户终止后台线程
}

//开始按钮
private void button1_Click(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)//判断backgroundWorker1是否正在运行异步操作
{
//backgroundWorker1.RunWorkerAsync();
backgroundWorker1.RunWorkerAsync(1000);//开始执行后台操作
}
}
private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e)
{
e.Result = ListNumber(backgroundWorker1,e);//运算结果保存在e.Result中
}
bool ListNumber(object sender, DoWorkEventArgs e)
{
int num=(int)e.Argument;//接收传入的参数
for (int i = 1; i <= num; i++)
{
if (backgroundWorker1.CancellationPending)//判断是否请求了取消后台操作
{
e.Cancel=true;
return false;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27006-2.html
可能是包装破了
你放久了一样也是生蛆
谁信啊
北洋海军除定远镇远外