Re:如何在vb net中动态创建后台工作程序

时间:2014-05-28 09:15:45

标签: arrays vb.net backgroundworker

关于这个问题我有一个后续问题:

How to dynamically create a background worker in VB.net

我担心我不明白DirectCast如何解决我的问题。我正在创建一个后台工作者数组:bWorker(0),bWorker(1)等,每个人都创建一个新的表单,它也在一个数组中:page(0),page(1)等。

后台工作人员需要“知道”他们的索引号,以便他们可以创建适当的页面(这是一个表单)。正如我之前提到的,我找到了一个有效的系统。我把backgroundworkers的哈希码放在一个数组中,我用它来检索它们的索引号。它只是感觉有点笨重,也许使用DirectCast会更好,但我不明白如何。

2 个答案:

答案 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中可用。