怎么在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# BackGroundWorker backgroundWorker1_DoWork中,按钮不能按的问题
C# form发起backgroundworker 当form close时 backgroundworker 还会继续工作吗