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
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)
| 归档时间: |
|
| 查看次数: |
29990 次 |
| 最近记录: |