一般在C#中调用线程用的是如下语句:
Thread thread1 = new Thread(new ThreadStart(function)); //or Thread thread2 = new Thread(new ParameterizedThreadStart(function));
其中function方法要求要么没有参数,要么只有一个object类型的参数。
那么如果我这里有一个方法function2(int, int)(即方法的参数不是object类型,数量也多于一个),要如何用ThreadStart委托调用它呢?目前我想的方法是多写一个RunFunction()方法,用它调用function2,再由ThreadStart调用RunFunction,但总觉得这样比较麻烦,还要多一个方法。能否有更好的手段?
Thread thread1 = new Thread(() => function2(1,2));
嗯,忘了有lambda这个东西了,受教了。
把你的参数封装成一个类。
即使把参数封装成一个类,但是在ParameterizedThreadStart中调用相应的方法依旧提示“function2的所有重载均与委托System.Threading.ParameterizedThreadStart不匹配”。
using System; using System.Threading; class Parameters { public int a; public int b; } static class Methods { public void function2(Parameters p) { //do something } } class programe { static void Main() { Thread thread1 = new Thread(new ParameterizedThreadStart(Methods.function2)); //此处提示编译错误:“function2”的重载均与委托“System.Threading.ParameterizedThreadStart”不匹配 } }
@飞鸟_Asuka: static class Methods
{
public static void function2(object p)
{
//do something
}
}
你可以仔细看下 ParameterizedThreadStart 的定义。