Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在单独的线程中运行方法_.net_C# 4.0 - Fatal编程技术网

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

.net 如何在单独的线程中运行方法,.net,c#-4.0,.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 Th

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

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,它将接受许多参数并传递给方法。请帮我写代码。感谢您在另一个线程中运行一些代码,您可以执行以下操作:

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
}

如果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));
}

“数据槽”有用吗?请参阅.NET 4上的“线程本地存储:线程相对静态字段和数据槽”,我认为您的
RunMethodInSeparateThread
方法似乎有点多余。我会这样做:

Task.Factory.StartNew(() => { Method1(param1); });
Task.Factory.StartNew(() => { Method2(param1, param2); });
啊,忘了“状态”参数。谢谢,杰戈芬。
Task.Factory.StartNew(() => { Method1(param1); });
Task.Factory.StartNew(() => { Method2(param1, param2); });