26

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

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

这是我得到的错误:

新的:

语法错误

结束功能:

'End Function' 前面必须有一个匹配的 'Function'。

4

3 回答 3

60

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

  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()
    
于 2012-04-16T22:41:32.947 回答
5

它在 VB中称为lambda 表达式。语法都是错误的,您需要实际声明一个 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
于 2012-04-17T00:08:28.083 回答
3

所谓的必须是功能而不是子。

单行(必须返回值):

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

多行:

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

来源:VB.Net 中的线程、闭包和 Lambda 表达式

于 2012-04-17T13:05:44.820 回答