web-dev-qa-db-ja.com

VB.NETで新しいスレッドを作成する

無名関数を使用して新しいスレッドを作成しようとしていますが、エラーが発生し続けます。ここに私のコードがあります:

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

ここに私が得るエラーがあります:

新着:

構文エラー

終了機能:

「関数の終了」の前には、一致する「関数」が必要です。

19
Matt9Atkins

これを行うには2つの方法があります。

  1. AddressOf演算子を使用して、既存のメソッドに

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

    そして、スレッドを作成して開始します。

    Dim thread As New Thread(AddressOf MyBackgroundThread)
    thread.Start()
    
  2. または、ラムダ関数として。

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

VBでは lambda expression と呼ばれます。構文はすべて間違っています。New演算子を使用するには、実際にThread型の変数を宣言する必要があります。また、作成するラムダは、Threadクラスコンストラクターに渡す引数の有効な代替である必要があります。いずれも値を返すデリゲートを受け取らないため、FunctionではなくSubを使用する必要があります。ランダムな例:

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
4
Hans Passant

呼び出されるものは、サブではなく関数でなければなりません。

単一行(値を返す必要があります):

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

複数行:

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

ソース: VB.Netのスレッディング、クロージャー、およびラムダ式

1
IvanH