使用带参数的方法创建新线程

时间:2013-02-13 13:39:22

标签: c# multithreading

我正在尝试创建新线程并使用参数传递方法,但错误输出。

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'

3 个答案:

答案 0 :(得分:34)

将参数传递给方法的一种更方便的方法是使用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

这是一本很棒的书!

答案 1 :(得分:12)

将您的线程初始化更改为:

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

还有以下方法:

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

To match the ParameterizedThreadStart delegate signature

答案 2 :(得分:0)

    public void myMethod(object myGrid)
    {
        var typedParam = (UltraGrid)myGrid;
        //...
    }


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