c#thread方法

时间:2011-03-01 14:41:49

标签: c# multithreading

如果我有

public void Method(int m)
{
  ...
}

如何为此方法创建线程?

  

线程t =新线程((方法));

     

t.Start(米);

无效。

5 个答案:

答案 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();