I am trying to create a new thread using an anonymous function but I keep getting errors. Here is my code:
New Thread(Function()
// Do something here
End Fu
What is called has to be a functinon not a sub.
Single line(has to return value):
Dim worker As New Thread(New ThreadStart(Function() 42))
Multiline:
Dim worker As New Thread(New ThreadStart(Function()
' Do something here
End Function))
Source: Threading, Closures, and Lambda Expressions in VB.Net
It is called a lambda expression in VB. The syntax is all wrong, you need to actually declare a variable of type Thread to use the New operator. And the lambda you create must be a valid substitute for the argument you pass to the Thread class constructor. None of which take a delegate that return a value so you must use Sub, not Function. A random example:
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
There's two ways to do this;
With the AddressOf
operator to an existing method
Sub MyBackgroundThread()
Console.WriteLine("Hullo")
End Sub
And then create and start the thread with;
Dim thread As New Thread(AddressOf MyBackgroundThread)
thread.Start()
Or as a lambda function.
Dim thread as New Thread(
Sub()
Console.WriteLine("Hullo")
End Sub
)
thread.Start()