将值从BackgroundWorker DoWork传递到BackgroundWorker Completed

3
我该如何在BackgroundWorkerDoWork函数和Completed函数之间传递一个值?由于BackgroundWorker Completed不是由BackgroundWorker DoWork调用的,因此我不确定该怎么做,除了声明一个public variable。实质上,我想让BackgroundWorker Completed通过ByVal接受来自BackgroundWorker DoWork的一个变量。

我同意你的观点,因为不能保证在同一线程上执行,所以“共享”数据的最安全方式是将其放入公共变量中,然后使用一些线程安全的访问机制来确保没有死锁。 - Karl Anderson
1个回答

3

当你声明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 属性 : MSDN

DoWorkEventArgs.Result 属性 : MSDN


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接