lia*_*p47 45 c# multithreading
我正在尝试通过以下方式传递参数:
Thread thread = new Thread(new ParameterizedThreadStart(DoMethod));
Run Code Online (Sandbox Code Playgroud)
知道怎么做吗?我很感激一些帮助
Tud*_*dor 96
lazyberezovsky有正确的答案.我想要注意,从技术上讲,由于变量捕获,您可以使用lambda表达式传递任意数量的参数:
var thread = new Thread(
() => DoMethod(a, b, c));
thread.Start();
Run Code Online (Sandbox Code Playgroud)
这是调用不适合ThreadStart或ParameterizedThreadStart委托的方法的一种方便方法,但是如果在将父线程中的参数传递给子线程的代码之后更改其中的参数,请注意很容易导致数据争用.
Ser*_*kiy 37
使用重载Thread.Start方法,它接受对象(如果需要多个参数,可以传递自定义类型或数组):
Foo parameter = // get parameter value
Thread thread = new Thread(new ParameterizedThreadStart(DoMethod));
thread.Start(parameter);
Run Code Online (Sandbox Code Playgroud)
并DoMethod简单地将参数转换为参数类型:
private void DoMethod(object obj)
{
Foo parameter = (Foo)obj;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在.NET 4.0及更高版本中BTW可以使用任务(也要注意竞争条件):
Task.Factory.StartNew(() => DoMethod(a, b, c));
Run Code Online (Sandbox Code Playgroud)