c#thread方法

如果我有

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

如何为此方法创建线程?

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

t.Start(米);

不管用。

您调用的方法需要一个参数。 因为它有一个参数和返回类型的void,您可以使用以下内容

 ThreadPool.QueueUserWorkItem(o => Method(m)); 

您无需使用此方法将int更改为方法签名中的对象。

使用ThreadPool比手动启动自己的Thread更有优势。 线程与ThreadPool

您可以使用lambda表达式执行此操作。 C#编译器在后台自动创建ThreadStart委托。

 Thread t = new Thread(() => Method(m)); t.Start(); 

请注意,如果稍后在代码中更改m ,则更改将传播到线程中(如果尚未输入Method 。 如果这是一个问题,你应该复制m

 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) {.....} 

方法需要使用对象而不是int才能使用ParameterizedThreadStart委托。

因此,将m更改为对象并首先将其强制转换为int。

请试试:

 Thread t = new Thread(new ThreadStart(method)); t.Start();