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

将参数传递给方法的一种更方便的方法是使用 lambda 表达式或匿名方法,因为您可以传递具有所需参数数量的方法。ParameterizedThreadStart 仅限于只有一个参数的方法。

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 回答