将值从 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

将值从 php 传递到 modal

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

将值从 uitableview 传递到 uicollectionview

如何将值从javascript变量传递给剃刀变量?

如何将值从angularjs传递给节点[重复]