标题几乎说明了。我有一些方法需要在新线程上运行,因为创建线程之前的所有代码都差不多,我想我会创建一个函数,可以将我需要调用的Action作为参数。
问题是,我还没有找到告诉线程它需要执行Action的方法。这甚至可能吗?这是我正在尝试做的一些示例代码。
private void ExecuteInBiggerStackThread(Action<Helper> action, Parameters parms)
{
ParameterizedThreadStart operation = new ParameterizedThreadStart(action);// here's the mess
Thread bigStackThread = new Thread(operation, 1024 * 1024);
bigStackThread.Start(parms);
bigStackThread.Join();
}
的问候,
西巴
答案 0 :(得分:8)
我甚至不打扰ParameterizedThreadStart
。让编译器完成脏工作:
private void ExecuteInBiggerStackThread(Action<Helper> action, Helper h)
{
Thread bigStackThread = new Thread(() => action(h), 1024 * 1024);
bigStackThread.Start();
bigStackThread.Join();
}
当然,您可以更进一步,将签名更改为:
private void ExecuteInBiggerStackThread(Action action) { ... }
答案 1 :(得分:7)
这样的事情应该做到这一点:
private void ExecuteInBiggerStackThread(Action<Helper> action, Helper h)
{
var operation = new ParameterizedThreadStart(obj => action((Helper)obj));
Thread bigStackThread = new Thread(operation, 1024 * 1024);
bigStackThread.Start(h);
bigStackThread.Join();
}
答案 2 :(得分:3)
或者该方法的更通用版本....
protected void ExecuteInBiggerStackThread<T>(Action<T> action, T parameterObject)
{
var bigStackThread = new Thread(() => action(parameterObject), 1024 * 1024);
bigStackThread.Start();
bigStackThread.Join();
}
答案 3 :(得分:0)
尝试使用Action<object>
然后转换为动作正文中的Helper