20

新しいスレッドを作成してパラメーター付きのメソッドを渡そうとしていますが、エラーが発生します。

Thread t = new Thread(myMethod);
t.Start(myGrid);

public void myMethod(UltraGrid myGrid)
{
}

---------エラー------------

エラー: CS1502 - 92 行目 (164) - ' ' に最適なオーバーロードされたメソッド マッチにSystem.Threading.Thread.Thread(System.Threading.ThreadStart)無効な引数が含まれています

エラー: CS1503 - 92 行目 (164) - 引数 '1': 'メソッド グループ' から ' ' に変換できませSystem.Threading.ThreadStart

4

3 に答える 3

68

パラメータをメソッドに渡すより便利な方法は、ラムダ式または匿名メソッドを使用することです。これは、メソッドに必要な数のパラメータを渡すことができるためです。ParameterizedThreadStart は、1 つのパラメーターのみを持つメソッドに限定されます。

Thread t = new Thread(()=>myMethod(myGrid));
t.Start();

public void myMethod(UltraGrid myGrid)
{
}

あなたがのような方法を持っていたら

public void myMethod(UltraGrid myGrid, string s)
{
}

Thread t = new Thread(()=>myMethod(myGrid, "abc"));
t.Start();

http://www.albahari.com/threading/#_Passing_Data_to_a_Thread

それは読むのに最適な本です!

于 2013-02-13T14:19:01.953 に答える
13

スレッドの初期化を次のように変更します。

var t = new Thread(new ParameterizedThreadStart(myMethod));
t.Start(myGrid);

また、次の方法もあります。

public void myMethod(object myGrid)
{
    var grid = (UltraGrid)myGrid;
}

ParameterizedThreadStart代理人の署名と一致するようにします。

于 2013-02-13T13:42:23.077 に答える
0
    public void myMethod(object myGrid)
    {
        var typedParam = (UltraGrid)myGrid;
        //...
    }


    Thread t = new Thread(new ParameterizedThreadStart(myMethod));
    t.Start(myGrid);
于 2013-02-13T13:43:56.513 に答える