b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

backgroundworker_C#while 线程等待_C# stringbuilder(2)

电脑杂谈  发布时间:2017-01-17 23:06:08  来源:网络整理

就这样,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;//允许用户终止后台线程

}

backgroundworker_C#while 线程等待_C# stringbuilder

//开始按钮

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

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...