如果我有
public void Method(int m)
{
...
}
如何为此方法创建线程?
线程t =新线程((方法));
t.Start(米);
无效。
答案 0 :(得分:28)
您可以使用lambda表达式执行此操作。 C#编译器会在幕后自动创建ThreadStart
委托。
Thread t = new Thread(() => Method(m));
t.Start();
请注意,如果您稍后在代码中更改m
,则更改将传播到线程中,如果尚未输入Method
。如果这是一个问题,您应该复制m
。
答案 1 :(得分:14)
您正在调用的方法需要一个参数。因为它有一个参数和返回类型的void,您可以使用以下
ThreadPool.QueueUserWorkItem(o => Method(m));
您无需使用此方法将int更改为方法签名中的对象。
使用ThreadPool比手动启动自己的线程更有优势。 Thread vs ThreadPool
答案 2 :(得分:8)
ThreadStart tsd = new ThreadStart(ThreadMethod);
Thread t = new Thread(tsd);
t.Start();
线程方法需要是一个返回类型为void且不接受任何参数的方法。
public void ThreadMethod() {.....}
另一个变种是ParameterizedThreadStart
ParameterizedThreadStart ptsd = new ParameterizedThreadStart(ThreadParamMethod);
Thread t = new Thread(ptsd);
t.Start(yourIntegerValue);
ThreadParamMethod是一个返回类型为void并接受一个object类型参数的方法。但是你可以传递任何东西作为对象。
public void ThreadParamMethod(object arg) {.....}
答案 3 :(得分:2)
Method需要使一个对象而不是一个int才能使用ParameterizedThreadStart委托。
因此,首先将m更改为对象并将其强制转换为int。
答案 4 :(得分:0)
请尝试:
Thread t = new Thread(new ThreadStart(method));
t.Start();