如何创建一个新线程来执行Action <t> </t>

时间:2010-07-20 14:14:47

标签: c# .net multithreading action

标题几乎说明了。我有一些方法需要在新线程上运行,因为创建线程之前的所有代码都差不多,我想我会创建一个函数,可以将我需要调用的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();
}

的问候,
西巴

4 个答案:

答案 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