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

标签 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

这是测试线程方法:

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/

相关文章:

VB.NET Custom Control(自定义绘图)刷新问题

.net - 在VB.NET中使用RSA加密进行解密

.net - 用于测试集合成员资格的 VB.NET/C# 比较运算符 - 就像 SQL 的 IN 运算符

java - java中的 "simple"线程池

visual-studio - 缺少项目/项目模板

MYSQL DATE 是否有可能在我今天插入日期然后在另一列中它是 + 5 个月?

c# - 使用正确的编码将字节数组转换为字符串

java - 处理餐厅场景中的同时预订请求

java - 在 JavaFX 中显示多条消息

c++ - 静态断言失败,返回 "Windows headers require the default packing option..."