Create a new thread in VB.NET

前端 未结 3 1741
粉色の甜心
粉色の甜心 2021-02-12 09:36

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         


        
相关标签:
3条回答
  • 2021-02-12 10:17

    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

    0 讨论(0)
  • 2021-02-12 10:19

    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
    
    0 讨论(0)
  • 2021-02-12 10:23

    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()
      
    0 讨论(0)
提交回复
热议问题