26

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

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

私が得るエラーは次のとおりです。

新しい:

構文エラー

終了機能:

「EndFunction」の前には、一致する「Function」が必要です。

4

3 に答える 3

60

これを行うには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()
    
于 2012-04-16T22:41:32.947 に答える
5

これは、VBではラムダ式と呼ばれます。構文はすべて間違っています。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
于 2012-04-17T00:08:28.083 に答える
3

いわゆるものは、サブではなく機能でなければなりません。

単一行(戻り値が必要):

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

マルチライン:

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

出典:VB.Netのスレッド化、クロージャ、ラムダ式

于 2012-04-17T13:05:44.820 に答える