Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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# - Fatal编程技术网

向C#中线程调用的函数发送参数?

向C#中线程调用的函数发送参数?,c#,C#,向C#中线程调用的函数发送参数, 这是我的代码: myThread = new Thread(new ThreadStart(myfunc)); myThread.Start(i); public void myfunc(int i) { ... } 我得到一个错误: “installDrivers”与委托匹配时没有重载 “system.Threading.ThredStart” 使用以下命令: myThread = new Thread(new ParameterizedThrea

向C#中线程调用的函数发送参数, 这是我的代码:

myThread = new Thread(new ThreadStart(myfunc));
myThread.Start(i);

public void myfunc(int i)
{
    ...
}
我得到一个错误:

“installDrivers”与委托匹配时没有重载 “system.Threading.ThredStart”

使用以下命令:

myThread = new Thread(new ParameterizedThreadStart(myfunc)); 
myThread.Start(i);

public void myfunc(object i) {... }
它可能对您的问题有用

使用此选项:

myThread = new Thread(new ParameterizedThreadStart(myfunc)); 
myThread.Start(i);

public void myfunc(object i) {... }
它可能对您的问题有用

您可以使用

你的功能呢

public void myfunc(object i)
{
    int myInt = Convert.ToInt32(i);
}
你可以用一个

你的功能呢

public void myfunc(object i)
{
    int myInt = Convert.ToInt32(i);
}

另一个选项是,利用lambdas可以轻松调用具有任意数量参数的函数,它还可以避免在一个参数的情况下从
对象
进行相当糟糕的转换:

int paramA = 1;
string paramB = "foo";

var myThread = new Thread(() => SomeFunc(paramA, paramB));
myThread.Start();

public void SomeFunc(int paramA, string paramB)
{
  // Do something...
}

另一个选项是,利用lambdas可以轻松调用具有任意数量参数的函数,它还可以避免在一个参数的情况下从
对象
进行相当糟糕的转换:

int paramA = 1;
string paramB = "foo";

var myThread = new Thread(() => SomeFunc(paramA, paramB));
myThread.Start();

public void SomeFunc(int paramA, string paramB)
{
  // Do something...
}
除非您使用的是C#<2.0,否则不需要创建委托。您可以让编译器隐式地为您创建它

myThread = new Thread(myfunc); 
myThread.Start(i);

public void myfunc(object i) 
{
    int i2 = (int)i; // if i is an int
}
但是请注意,
Thread
构造函数只接受两种类型的委托:一种是无参数的(
ThreadStart
),另一种是接受
对象
参数的(
ParameterizedThreadStart
)。这里我们使用第二个。除非您使用的是C#<2.0,否则不需要创建委托。您可以让编译器隐式地为您创建它

myThread = new Thread(myfunc); 
myThread.Start(i);

public void myfunc(object i) 
{
    int i2 = (int)i; // if i is an int
}

但是请注意,
Thread
构造函数只接受两种类型的委托:一种是无参数的(
ThreadStart
),另一种是接受
对象
参数的(
ParameterizedThreadStart
)。所以这里我们使用第二个。

+1是正确答案,但是使用
Convert.ToInt32
而不是简单的
int-myInt=(int)i?我的参数是bool数组,如何将它们从对象转换为bool数组?+1是正确答案,但是否有理由使用
convert.ToInt32
而不是简单的
int myInt=(int)I?我的参数是bool数组,如何将它们从对象转换为bool数组?sari-
bool[]arrBool=(bool[])o
其中
o
是函数参数。sari-
bool[]arrBool=(bool[])o
其中
o
是函数参数。