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

Tho*_*mas 18 .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);
}
Run Code Online (Sandbox Code Playgroud)

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

Fre*_*eer 32

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

new Thread(delegate () {
    Method1(param1, param2);
}).Start();
Run Code Online (Sandbox Code Playgroud)

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

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

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

private static void Method1(int Param1, int Param2)
{
    //Method1 implementation
}
Run Code Online (Sandbox Code Playgroud)


Dun*_*unc 8

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

Task.Factory.StartNew(() => { Method1(param1); });
Task.Factory.StartNew(() => { Method2(param1, param2); });
Run Code Online (Sandbox Code Playgroud)


Joh*_*hnC 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));
}
Run Code Online (Sandbox Code Playgroud)