我希望将两个或多个参数传递给 VB 2008 中的线程。
以下方法(修改后)无需参数即可正常工作,并且我的状态栏更新得非常酷。 但我似乎无法让它与一个、两个或更多参数一起工作。
这是我认为按下按钮时应该发生的伪代码:
Private Sub Btn_Click()
Dim evaluator As New Thread(AddressOf Me.testthread(goodList, 1))
evaluator.Start()
Exit Sub
这是测试线程方法:
Private Sub testthread(ByRef goodList As List(Of OneItem), ByVal coolvalue As Integer)
StatusProgressBar.Maximum = 100000
While (coolvalue < 100000)
coolvalue = coolvalue + 1
StatusProgressBar.Value = coolvalue
lblPercent.Text = coolvalue & "%"
Me.StatusProgressBar.Refresh()
End While
End Sub
最佳答案
首先:AddressOf
只是获取函数的委托(delegate) - 您不能指定任何其他内容(即捕获任何变量)。
现在,您可以通过两种可能的方式启动线程。
- 在构造函数中传递一个
Action
,然后Start()
线程。 - 传递
ParameterizedThreadStart
并将一个额外对象参数转发给调用.Start(parameter)
时指向的方法
我认为后一种选择与前通用、前 lambda 时代不合时宜 - 最晚在 VB10 中已经结束。
您可以使用该原始方法并创建一个列表或结构,将其作为单个对象参数传递给线程代码,但是因为我们现在 有闭包,您可以在匿名 Sub
上创建线程,该线程本身知道所有必要的变量(这是编译器为您执行的工作)。
苏...
Dim Evaluator = New Thread(Sub() Me.TestThread(goodList, 1))
确实就是这样;)
关于vb.net - VB中如何在线程中传递多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4018282/