我找到了一个非常好的代码,它在单独的线程中运行所有方法.代码如下
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)
使用.NET 4,RunMethodInSeparateThread我认为你的方法似乎有点多余.我会这样做:
Task.Factory.StartNew(() => { Method1(param1); });
Task.Factory.StartNew(() => { Method2(param1, param2); });
Run Code Online (Sandbox Code Playgroud)
如果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)