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

backgroundworker_C#while 线程等待_C# stringbuilder

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

C#while 线程等待_C# stringbuilder_backgroundworker

Worker1_DoWork(object sender, DoWorkEventArgs e)

变量e有两个属性:Argument和Result,传入的argument就传给了Argument;而另一个属性Result则是保存运算结果,二者都是object类型。可以将运算结果赋给Result属性,这个属性会在运算完成后传给OnRunWorkerCompleted事件的委托方法的参数RunWorkerCompletedEventArgse,从而将运算结果带给前台线程。

DoWork事件的委托方法主要完成后台处理。需要注意的是该委托方法中在处理数据前要判断是否已请求取消后台操作(如调用CancelAsync了方法),如果已经请求取消后台操作,则退出后台线程。判断是否请求取消后台线程的方法为CancellationPending。

if (backgroundWorker1.CancellationPending)

{

e.Cancel=true;

return ;

}

处理过程中不断发送处理信息,以供前台显示处理进度或完成度的操作也是在这个委托中完成的。发送信息的是BackgroundWorker类的ReportProgress方法[前提是BackgroundWorker的WorkerReportsProgress属性已经设为true,否则调用该方引发异常]。ReportProgress也有两种重载形式:voidReportProgress(int percentProgress)和void ReportProgress(intpercentProgress, object userState)。

percentProgress返回的是已完成的后台操作所占的百分比,范围从 0% 到100%。由于是百分比,所以最好是一个[0,100]闭合区间的整数,如果超出这个范围则可能引发异常(例如把这个数据赋给进度条控件时)。

userState是传递到BackgroundWorker.RunWorkerAsync(System.Object)的状态对象。可以用于返回处理过程产生的数据。

需要注意的是:在ReportProgress发送信息之前或之后,后台线程应该交出时间片,以供其他线程完成相关操作,如主线程UI界面的更新操作等,否则可能会使其他线程无法工作甚至使程序死掉。交出时间片的工作可以使用Thread.Sleep()方法完成,使后台线程暂时休眠一段时间。休眠时间长短可以自定,如Thread.Sleep(100)。当然由于仅仅是为了交出时间片,也可以设成Thread.Sleep(0)。

3)ReportProgress方触发BackgroundWorker的ProgressChanged事件。ProgressChanged事件的委托方法在主线程中运行,主要用于将处理进度等信息反馈给主线程[DoWork事件的委托方法不负责这项工作]。ProgressChanged的委托方法形式为:

【方法名(object sender, ProgressChangedEventArgs e)】,如下:

backgroundWorker1_ProgressChanged(object sender,ProgressChangedEventArgs e)

参数e中就包含着ReportProgress传出的percentProgress和userState[如果第二步调用的是ReportProgress的只有一个参数的重载形式,那么e.UserState为空]。backgroundworker


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-27006-1.html

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

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