Create a new thread in VB.NET

There's two ways to do this;

  1. 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()
    
  2. Or as a lambda function.

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

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

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