Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用带参数的方法创建新线程_C#_Multithreading - Fatal编程技术网

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

C# 使用带参数的方法创建新线程,c#,multithreading,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)”已 一些无效的参数 错误:CS15

我正在尝试创建新线程并传递一个带有参数的方法,但出现了错误

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


将线程初始化更改为:

var t = new Thread(new ParameterizedThreadStart(myMethod));
t.Start(myGrid);
以及用于:

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

.

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


那是一本好书

我想我们应该猜猜你犯了什么错误?请在你的问题中包括你得到的错误!类中是否有多个名为
myMethod
的方法?根本不需要使用
ParameterizedThreadStart
,因为可以推断出相应的委托类型。所以只要将参数
myGrid
更改为
object
就足够了。这很简单,但是如果myMethod返回了什么呢?我应该对代码做什么更改?谢谢,帮助了我。
public void myMethod(UltraGrid myGrid, string s)
{
}

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