将值从 BackgroundWorker DoWork 传递到 BackgroundWorker Completed
Posted
技术标签:
【中文标题】将值从 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 DoWork 传递到 BackgroundWorker Completed的主要内容,如果未能解决你的问题,请参考以下文章
将值从presentingViewController 传回presentingViewController
通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图