c#thread方法

eli*_*isa 17 c# multithreading

如果我有

public void Method(int m)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

如何为此方法创建线程?

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

t.Start(米);

不管用.

Rei*_*ica 28

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

Thread t = new Thread(() => Method(m));
t.Start();
Run Code Online (Sandbox Code Playgroud)

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


Pet*_*lly 14

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

ThreadPool.QueueUserWorkItem(o => Method(m));
Run Code Online (Sandbox Code Playgroud)

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

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


S M*_*ran 8

ThreadStart tsd = new ThreadStart(ThreadMethod);
Thread t = new Thread(tsd);
t.Start();
Run Code Online (Sandbox Code Playgroud)

线程方法需要是一个返回类型为void且不接受任何参数的方法.

public void ThreadMethod() {.....}
Run Code Online (Sandbox Code Playgroud)

另一个变体是ParameterizedThreadStart

ParameterizedThreadStart ptsd = new ParameterizedThreadStart(ThreadParamMethod);
Thread t = new Thread(ptsd);
t.Start(yourIntegerValue);
Run Code Online (Sandbox Code Playgroud)

ThreadParamMethod是一个返回类型为void并接受一个object类型参数的方法.但是你可以传递任何东西作为对象.

public void ThreadParamMethod(object arg) {.....}
Run Code Online (Sandbox Code Playgroud)