如何在单独的线程中运行方法

时间:2011-03-25 13:14:42

标签: .net c#-4.0

我找到了一段非常好的代码,它在单独的线程中运行所有方法。 代码如下

private static void Method1()
{
    //Method1 implementation
}

private static void Method2()
{
    //Method2 implementation
}

private static void RunMethodInSeparateThread(Action action)
{
    var thread = new Thread(new ThreadStart(action));
    thread.Start();
}

static void Main(string[] args)
{
    RunMethodInSeparateThread(Method1);
    RunMethodInSeparateThread(Method2);
}

在这种情况下如何将参数传递给方法,并且可能存在Method1可能需要2个参数并且Method2可能需要3个参数的情况。在这种情况下如何以通用方式构造RunMethodInSeparateThread,它将接受许多参数并传递给该方法。请帮我代码。感谢

5 个答案:

答案 0 :(得分:31)

要在另一个线程中运行一些代码,您可以这样做:

new Thread(delegate () {
    Method1(param1, param2);
}).Start();

您可以接受需要接受可变数量参数的方法的参数集或字典。或者您可以创建允许不同数量参数的单独方法。例如:

private static void Method1()
{
    //Method1 implementation
}

private static void Method1(int Param1)
{
    //Method1 implementation
}

private static void Method1(int Param1, int Param2)
{
    //Method1 implementation
}

答案 1 :(得分:8)

使用.NET 4,我认为你的RunMethodInSeparateThread方法似乎有点多余。我会这样做:

Task.Factory.StartNew(() => { Method1(param1); });
Task.Factory.StartNew(() => { Method2(param1, param2); });

答案 2 :(得分:6)

如果Method1和Method2的运行时间相当短,最好的方法就是不创建新线程。您可以使用.NET线程池,如下所示:

private static void Method1(int x)
{
    //Method1 implementation
}

private static void Method2(int x, int y)
{
    //Method2 implementation
}

public static void Main()
{
  ThreadPool.QueueUserWorkItem(() => Method1(4));
  ThreadPool.QueueUserWorkItem(() => Metho2(13, 7));
}

答案 3 :(得分:3)

private static void Method1(int x, int y, int c)
{
    //Method1 implementation
}

static void Main(string[] args)
{
    ThreadPool.QueueUserWorkItem(state => Method1(1,2,3));
}

答案 4 :(得分:1)

“数据插槽”有用吗?请参阅http://msdn.microsoft.com/en-us/library/6sby1byh.aspx

中的“线程本地存储:线程相对静态字段和数据槽”