关于这个问题我有一个后续问题:
How to dynamically create a background worker in VB.net
我担心我不明白DirectCast如何解决我的问题。我正在创建一个后台工作者数组:bWorker(0),bWorker(1)等,每个人都创建一个新的表单,它也在一个数组中:page(0),page(1)等。
后台工作人员需要“知道”他们的索引号,以便他们可以创建适当的页面(这是一个表单)。正如我之前提到的,我找到了一个有效的系统。我把backgroundworkers的哈希码放在一个数组中,我用它来检索它们的索引号。它只是感觉有点笨重,也许使用DirectCast会更好,但我不明白如何。
答案 0 :(得分:0)
BackgroundWorker.RunWorkerAsync
有两次重载。请参阅BackgroundWorker.RunWorkerAsync(Object)
。
现在,您可以BackgroundWorker.DoWork
使用DoWorkEventArgs.Argument
传递变量并将其。
Dim BackgroundWorker1 As New System.ComponentModel.BackgroundWorker
AddHandler BackgroundWorker1.DoWork, AddressOf BackgroundWorker_DoWork
Dim BackgroundWorker2 As New System.ComponentModel.BackgroundWorker
AddHandler BackgroundWorker2.DoWork, AddressOf BackgroundWorker_DoWork
' I'm going to pass integers, but you can pass whatever you want.
BackgroundWorker1.RunWorkerAsync(0)
BackgroundWorker2.RunWorkerAsync(1)
Private Sub BackgroundWorker_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs)
Select Case e.Argument
Case 0
' Form1
Case 1
' Form2
End Select
End Sub
答案 1 :(得分:0)
我找到了解决方案。我对e.Argument系统的问题是它只适用于DoWork。我使用RunWorkerCompleted来显示创建的表单(如果我尝试使用DoWork显示它,则会出现严重错误)。 RunWorkerCompleted没有e.Argument属性。我的解决方案是这样做:e.Result = e.Argument in DoWork,因为e.Result在RunWorkerCompleted中可用。