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;">//</span><span style="color: #008000;">如果有更多的信息需要传递,可以使用 e.UserState 传递一个自定义的类型。
</span><span style="color: #008000;">//</span><span style="color: #008000;">这是一个 object 类型的对象,您可以通过它传递任何类型。
</span><span style="color: #008000;">//</span><span style="color: #008000;">我们仅把当前 sum 的值通过 e.UserState 传回,并通过显示在窗口上。</span>
<span style="color: #0000ff;">string</span> message =<span style="color: #000000;"> e.UserState.ToString();
</span><span style="color: #0000ff;">this</span>.labelSum.Text =<span style="color: #000000;"> message;
}
BGWorker_DoWork(= sender endNumber = (e.Argument != = (
</span><span style="color: #0000ff;">int</span> sum = <span style="color: #800080;">0</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i <= endNumber; i++<span style="color: #000000;">)
{
sum </span>+=<span style="color: #000000;"> i;
</span><span style="color: #0000ff;">string</span> message = <span style="color: #800000;">"</span><span style="color: #800000;">Current sum is: </span><span style="color: #800000;">"</span> +<span style="color: #000000;"> sum.ToString();
</span><span style="color: #008000;">//</span><span style="color: #008000;">ReportProgress 方法把信息传递给 ProcessChanged 事件处理函数。
</span><span style="color: #008000;">//</span><span style="color: #008000;">第一个参数类型为 int,表示执行进度。
</span><span style="color: #008000;">//</span><span style="color: #008000;">如果有更多的信息需要传递,可以使用 ReportProgress 的第二个参数。
</span><span style="color: #008000;">//</span><span style="color: #008000;">这里我们给第二个参数传进去一条消息。</span>
<span style="color: #000000;"> bgWorker.ReportProgress(i,message); } }
_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;">//</span><span style="color: #008000;">计算已经结束,需要禁用取消按钮。</span>
<span style="color: #0000ff;">this</span>.btnCancel.Enabled = <span style="color: #0000ff;">false</span><span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;">计算过程中的异常会被抓住,在这里可以进行处理。</span>
<span style="color: #0000ff;">if</span> (e.Error != <span style="color: #0000ff;">null</span><span style="color: #000000;">)
{
Type errorType </span>=<span style="color: #000000;"> e.Error.GetType();
</span><span style="color: #0000ff;">switch</span><span style="color: #000000;"> (errorType.Name)
{
</span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">ArgumentNullException</span><span style="color: #800000;">"</span><span style="color: #000000;">:
</span><span style="color: #0000ff;">case</span> <span style="color: #800000;">"</span><span style="color: #800000;">MyException</span><span style="color: #800000;">"</span><span style="color: #000000;">:
</span><span style="color: #008000;">//</span><span style="color: #008000;">do something.</span>
<span style="color: #0000ff;">break</span><span style="color: #000000;">;
</span><span style="color: #0000ff;">default</span><span style="color: #000000;">:
</span><span style="color: #008000;">//</span><span style="color: #008000;">do something.</span>
<span style="color: #0000ff;">break</span><span style="color: #000000;">;
}
}
</span><span style="color: #008000;">//</span><span style="color: #008000;">计算结果信息:e.Result
</span><span style="color: #008000;">//</span><span style="color: #008000;">use it do something.</span>
}
e.Result = sum;
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |