在VB.NET中创建一个新线程

时间:2012-04-16 22:24:16

标签: vb.net multithreading

我正在尝试使用匿名函数创建一个新线程,但我一直在收到错误。这是我的代码:

New Thread(Function() 
    // Do something here
End Function).Start

以下是我得到的错误:

新:

  

语法错误

结束功能:

  

'结束功能'前面必须有匹配的'功能'。

3 个答案:

答案 0 :(得分:42)

有两种方法可以做到这一点;

  1. 使用现有方法的AddressOf运算符

    Sub MyBackgroundThread()
      Console.WriteLine("Hullo")
    End Sub
    

    然后用;

    创建并启动线程
    Dim thread As New Thread(AddressOf MyBackgroundThread)
    thread.Start()
    
  2. 或作为lambda函数。

    Dim thread as New Thread(
      Sub() 
        Console.WriteLine("Hullo")
      End Sub
    )
    thread.Start()
    

答案 1 :(得分:4)

在VB中称为lambda expression。语法完全错误,您需要实际声明Thread类型的变量以使用New运算符。您创建的lambda必须是传递给Thread类构造函数的参数的有效替代。其中没有一个代理返回一个值,因此您必须使用Sub,而不是Function。一个随机的例子:

Imports System.Threading

Module Module1

    Sub Main()
        Dim t As New Thread(Sub()
                                Console.WriteLine("hello thread")
                            End Sub)
        t.Start()
        t.Join()
        Console.ReadLine()
    End Sub

End Module

答案 2 :(得分:1)

所谓的必须是一个不是子的函数。

单行(必须返回值):

Dim worker As New Thread(New ThreadStart(Function() 42))

多:

Dim worker As New Thread(New ThreadStart(Function()
                                                     ' Do something here
                                                 End Function))

来源:Threading, Closures, and Lambda Expressions in VB.Net