加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# BackgroundWorker 详解

发布时间:2020-12-15 04:43:03 所属栏目:百科 来源:网络整理
导读:BackgroundWorker _demoBGWorker = += BGWorker_DoWork( sum = ( i = ; i ; i++ += .progressBarSum.Maximum = BGWorker_DoWork( endNumber = (e.Argument != = ( sum = ( i = ; i += _demoBGWorker.WorkerReportsProgress = += BGWorker_ProgressChanged; B

BackgroundWorker _demoBGWorker = += BGWorker_DoWork( sum = ( i = ; i <= ; i+++=

.progressBarSum.Maximum = BGWorker_DoWork( endNumber = (e.Argument != = ( sum = ( i = ; i <= endNumber; i+++=

_demoBGWorker.WorkerReportsProgress = += BGWorker_ProgressChanged;

BGWorker_ProgressChanged( .progressBarSum.Value =</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;如果有更多的信息需要传递,可以使用 e.UserState 传递一个自定义的类型。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这是一个 object 类型的对象,您可以通过它传递任何类型。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;我们仅把当前 sum 的值通过 e.UserState 传回,并通过显示在窗口上。</span> <span style="color: #0000ff;"&gt;string</span> message =<span style="color: #000000;"&gt; e.UserState.ToString(); </span><span style="color: #0000ff;"&gt;this</span>.labelSum.Text =<span style="color: #000000;"&gt; message;

}

BGWorker_DoWork(= sender endNumber = (e.Argument != = (</span><span style="color: #0000ff;"&gt;int</span> sum = <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;for</span> (<span style="color: #0000ff;"&gt;int</span> i = <span style="color: #800080;"&gt;0</span>; i <= endNumber; i++<span style="color: #000000;"&gt;) { sum </span>+=<span style="color: #000000;"&gt; i; </span><span style="color: #0000ff;"&gt;string</span> message = <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;Current sum is: </span><span style="color: #800000;"&gt;"</span> +<span style="color: #000000;"&gt; sum.ToString(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;ReportProgress 方法把信息传递给 ProcessChanged 事件处理函数。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;第一个参数类型为 int,表示执行进度。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;如果有更多的信息需要传递,可以使用 ReportProgress 的第二个参数。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;这里我们给第二个参数传进去一条消息。</span>

<span style="color: #000000;"> bgWorker.ReportProgress(i,message);
Thread.Sleep(<span style="color: #800080;">600<span style="color: #000000;">);
}
}

_demoBGWorker.WorkerSupportsCancellation = ;

<span style="color: #008000;">//<span style="color: #008000;">在操作的过程中需要检查用户是否取消了当前的操作。
<span style="color: #0000ff;">if (bgWorker.CancellationPending == <span style="color: #0000ff;">true<span style="color: #000000;">)
{
e.Cancel = <span style="color: #0000ff;">true<span style="color: #000000;">;
<span style="color: #0000ff;">break<span style="color: #000000;">;
}

_demoBGWorker.CancelAsync();

_demoBGWorker.RunWorkerCompleted += BGWorker_RunWorkerCompleted( </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;计算已经结束,需要禁用取消按钮。</span> <span style="color: #0000ff;"&gt;this</span>.btnCancel.Enabled = <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;; </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;计算过程中的异常会被抓住,在这里可以进行处理。</span> <span style="color: #0000ff;"&gt;if</span> (e.Error != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { Type errorType </span>=<span style="color: #000000;"&gt; e.Error.GetType(); </span><span style="color: #0000ff;"&gt;switch</span><span style="color: #000000;"&gt; (errorType.Name) { </span><span style="color: #0000ff;"&gt;case</span> <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;ArgumentNullException</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;: </span><span style="color: #0000ff;"&gt;case</span> <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;MyException</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;: </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;do something.</span> <span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;default</span><span style="color: #000000;"&gt;: </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;do something.</span> <span style="color: #0000ff;"&gt;break</span><span style="color: #000000;"&gt;; } } </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;计算结果信息:e.Result </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;use it do something.</span>

}

e.Result = sum;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读