怎么在backgroundWorker执行时传递数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在backgroundWorker执行时传递数据相关的知识,希望对你有一定的参考价值。

参考技术A BackgroundWorker的ReportProgress()方法,有两个重载,其中一个有两个参数,

ReportProgress(Int32, Object) 第一个int32,可以用来传递运行进度,第二个Object可以返回你要传的任何数据,因为它是Object,可以接收任何类型,如果还有多个数据要传,可以设为数组来传。
在DoWork方法里传入数据
ReportProgress(Progresspercent,result);//传入数据Progresspercent:进度,result:运行 过程中的结果.
在backgroundWorker1_ProgressChanged事件下,取出数据。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)

this.progressBar1.Value = e.ProgressPercentage; //此处取出的是上面传的int32(Progresspercent)
this.textBox1.Text = e.UserState.ToString(); //此处取出的e.UserState 就是上面传 入的Object(result)
参考技术B 说清楚点追问

就是在backgroundWorker执行时 传递数据给控件

追答

backgroundWorker 中的事件ProgressChange中传递数据即可

本回答被提问者采纳

将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed

【中文标题】将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed【英文标题】:Pass values from BackgroundWorker DoWork to BackgroundWorker Completed 【发布时间】:2013-07-29 23:24:02 【问题描述】:

如何将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed?由于BackgroundWorker Completed 没有被BackgroundWorker DoWork 调用,我不知道该怎么做,除非声明一个public variable。本质上,我希望BackgroundWorker Completed 通过ByVal 接受来自BackgroundWorker DoWork 的变量。

【问题讨论】:

我同意你的观点,因为不能保证你在同一个线程上执行,所以“共享”数据的最安全方法是将其放在公共变量中,然后使用一些线程安全访问确保没有死锁的机制。 【参考方案1】:

当您声明 DoWork 函数时,请注意它内置了一些方便的参数:

Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) _
                                                  Handles backgroundWorker1.DoWork

还要注意 RunWorkerCompleted 处理程序的类似参数:

Private Sub backgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
                                          ByVal e As RunWorkerCompletedEventArgs) _
                                       Handles backgroundWorker1.RunWorkerCompleted

至关重要的是,您可以访问RunWorkerCompletedEventArgs 中的e.Result,它可以是任何对象,还可以访问DoWorkEventArgs 中的e.Result - 后者在方法完成时传递给前者,所以在刚刚设置的工作方法结束:

e.Result = myResult

然后在您的 RunWorkerCompleted 处理程序中,您也可以通过以下方式访问它:

if e.Result = (whatever) then 
    .... etc

参考:

RunWorkerCompletedEventArgs.Result Property : MSDN

DoWorkEventArgs.Result Property : MSDN

【讨论】:

以上是关于怎么在backgroundWorker执行时传递数据的主要内容,如果未能解决你的问题,请参考以下文章

将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed

C#ThreadBackgroundWorker的使用

C# BackGroundWorker backgroundWorker1_DoWork中,按钮不能按的问题

简单多线程BackgroundWorker

C# form发起backgroundworker 当form close时 backgroundworker 还会继续工作吗

C#中的BackgroundWorker控件