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

时间:2011-10-02 09:20:43

标签: c#

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

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

public void myfunc(int i)
{
    ...
}

我收到错误:

  

'installDrivers'没有超载匹配委托   'system.Threading.ThredStart'

4 个答案:

答案 0 :(得分:2)

您可以使用ParameterizedThreadStart

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

你的功能

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

答案 1 :(得分:1)

另一个使用lambdas的选项可以很容易地调用具有任意数量参数的函数,它还避免了在一个参数情况下object的相当讨厌的转换:

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

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

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

答案 2 :(得分:0)

使用它:

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

public void myfunc(object i) {... }

它对您的问题可能有用

答案 3 :(得分:0)

除非您使用的是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),另一种是object参数(ParameterizedThreadStart)。所以我们在这里使用第二个。