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

本文关键字:新线程 创建 线程 方法 参数 | 更新日期: 2023-09-27 17:59:00

我试图创建新线程并传递一个带参数的方法,但出错了。

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"

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

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

那是一本很好读的书!

将线程初始化更改为:

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

以及方法:

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

匹配ParameterizedThreadStart代表签名。

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

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