gpt4 book ai didi

vb.net - VB中如何在线程中传递多个参数

转载 作者:行者123 更新时间:2023-12-03 00:56:52 34 4
gpt4 key购买 nike

我希望将两个或多个参数传递给 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com