Создать новый поток в 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