Создать новый поток в VB.NET

Я пытаюсь создать новый поток, используя анонимную функцию, но я продолжаю получать ошибки. Вот мой код:

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

Вот ошибки, которые я получаю:

Новое:

Ошибка синтаксиса

Конечная функция:

"Конечная функция" должна предшествовать соответствующая "Функция".

Ответы

Ответ 1

Есть два способа сделать это:

  • При использовании оператора AddressOf существующего метода

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

    И затем создайте и запустите поток с помощью

    Dim thread As New Thread(AddressOf MyBackgroundThread)
    thread.Start()
    
  • Или как лямбда-функция.

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

Ответ 2

Он называется lambda expression в VB. Синтаксис неверен, вам нужно фактически объявить переменную типа Thread для использования оператора New. И создаваемая лямбда должна быть допустимой заменой аргумента, который вы передаете конструктору класса 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

Ответ 3

То, что называется, должно быть functinon, а не sub.

Одиночная строка (должна возвращать значение):

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

Multiline:

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

Источник: Threading, Closures и Lambda Expressions в VB.Net