将参数发送到C#中线程调用的函数, 这是我的代码:
myThread = new Thread(new ThreadStart(myfunc));
myThread.Start(i);
public void myfunc(int i)
{
...
}
我收到错误:
'installDrivers'没有超载匹配委托 'system.Threading.ThredStart'
答案 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
)。所以我们在这里使用第二个。