c# – 如何使用BackgroundWorker事件RunWorkerCompleted
发布时间:2020-12-15 18:31:00 所属栏目:百科 来源:网络整理
导读:总而言之,我已经知道BackgroundWorker在WinForm中处理多线程案例的基本用法.代码结构如下所示. 在应用程序的主线程中.刚刚启动BackgroundWork. if (backgroundWorker1.IsBusy != true) { // Start the asynchronous operation. backgroundWorker1.RunWorkerA
总而言之,我已经知道BackgroundWorker在WinForm中处理多线程案例的基本用法.代码结构如下所示.
在应用程序的主线程中.刚刚启动BackgroundWork. if (backgroundWorker1.IsBusy != true) { // Start the asynchronous operation. backgroundWorker1.RunWorkerAsync(); } 然后它会触发DoWork事件.所以我们可以在那里做点什么. private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; ...... // report progress. worker.ReportProgress(iProgress); .... } 然后我们只需要处理ProgressChanged事件以显示BackgroundWorker进度. private void backgroundWorker1_ProgressChanged(object sender,ProgressChangedEventArgs e) { //show progress. resultLabel.Text = (e.ProgressPercentage.ToString() + "%"); } DoWork完成或发生异常后.将触发RunWorkerCompleted事件. 这是我对这个事件处理的问题.请帮助审查它们.谢谢. 我注意到RunWorkerCompletedEventArgs中有一个名为’Result’的属性,它用于什么?我怎么用呢? 是否有可能接收我的自定义异常消息而不是e.error?如果有,如何制作? private void backgroundWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e) { if (e.Cancelled == true) { resultLabel.Text = "Canceled!"; } else if (e.Error != null) { resultLabel.Text = "Error: " + e.Error.Message; } else { resultLabel.Text = e.Result.ToString(); } } 解决方法
RunWorkerCompletedEventArgs中的Result属性是您在DoWork()中分配给DoWorkEventHandler的Result属性的值.
您可以为此分配任何您喜欢的内容,因此您可以返回整数,字符串,对象/复合类型等. 如果在DoWork()中抛出异常,则可以在RunWorkerCompletedEventArgs的Error属性中访问该异常.在这种情况下,访问Result属性将导致抛出TargetInvocationException. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |