elc*_*ool 14 vb.net multithreading visual-studio
我想在VB 2008中将两个或更多参数传递给一个线程.
以下方法(修改)在没有参数的情况下工作正常,我的状态栏更新非常酷.但我似乎无法使用一个,两个或更多参数.
这是按下按钮时我想要发生的伪代码:
Private Sub Btn_Click()
Dim evaluator As New Thread(AddressOf Me.testthread(goodList, 1))
evaluator.Start()
Exit Sub
Run Code Online (Sandbox Code Playgroud)
这是testthread方法:
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
Run Code Online (Sandbox Code Playgroud)
Dar*_*rio 37
首先:AddressOf
只是获取一个函数的委托 - 你不能指定任何其他东西(即捕获任何变量).
现在,您可以通过两种可能的方式启动一个线程.
Action
在构造函数和Start()
线程中传递一个.ParameterizedThreadStart
将一个额外的对象参数传递给转发时指向的方法.Start(parameter)
我认为后一种选择是前通用的,前lambda时代的一种时代错误 - 最近已经用VB10结束了.
您可以使用该原始方法并创建一个列表或结构,您将其作为此单个对象参数传递给线程代码,但由于我们现在有了闭包,您可以在匿名上创建线程,该线程Sub
自身知道所有必需的变量(是由编译器为您执行的工作).
洙......
Dim Evaluator = New Thread(Sub() Me.TestThread(goodList, 1))
Run Code Online (Sandbox Code Playgroud)
这真的就是那个;)
像这样的东西(我不是VB程序员)
Public Class MyParameters
public Name As String
public Number As Integer
End Class
newThread as thread = new Thread( AddressOf DoWork)
Dim parameters As New MyParameters
parameters.Name = "Arne"
newThread.Start(parameters);
public shared sub DoWork(byval data as object)
{
dim parameters = CType(data, Parameters)
}
Run Code Online (Sandbox Code Playgroud)
只需创建一个具有两个成员(一个List(Of OneItem)
和另一个)的类或结构Integer
,然后发送该类的一个实例。
编辑:抱歉,错过了您也遇到了一个参数的问题。只需查看线程构造函数 (ParameterizedThreadStart),该页面就包含一个简单的示例。