如何创建System.Diagnostics.Process数组

时间:2018-04-11 03:56:53

标签: c# exit-code system.diagnostics

我想同时调用同一个EXE中的三个,并且当它们全部终止时我期望三个返回值,这是我到目前为止的方式:

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = MyEXEPath;
    for(int i=0;i<3;i++)
    {
       p.StartInfo.Arguments =  para1[i] + " " + para2[i];
       p.Start();
       Console.WriteLine("Start run");
    }
    p.WaitForExit();
    int result = p.ExitCode;
    Console.WriteLine("Return info:" + results);  //Problem: I can only get the last return value

你可以看到我只有一个返回值,而不是三个,所以我想知道我是否可以这样做:

    int[] results = new int[3];
    System.Diagnostics.Process p[] = new System.Diagnostics.Process()[3];
    for(int i=0;i<3;i++)
    {
       p[i].StartInfo.FileName = MyEXEPath;
       p[i].StartInfo.Arguments = para1[i] + " " + para2[i];
       p[i].Start();
       Console.WriteLine("Start run");
       p[i].EnableRaisingEvents = true;
       p[i].Exited += (sender, e) =>
       {
          results[i] = p[i].ExitCode;
          Console.WriteLine("Return info:" + results[i]);
       };
    }
    while(results[0] != 0 && results[1] != 0 && results[2] != 0 )
    {
        break;  //all EXEs ternimated,  break and continue my job
    }

确保编译失败,System.Diagnostics.Process p[] = new System.Diagnostics.Process()[3]; 那么我该如何解决呢?还是有另一种方法呢?

2 个答案:

答案 0 :(得分:2)

您已离婚,您必须删除(),然后为每个人创建新流程:

System.Diagnostics.Process[] p = new System.Diagnostics.Process[3];
p[0] = new System.Diagnostics.Process();
p[1] = new System.Diagnostics.Process();
p[2] = new System.Diagnostics.Process();

或者,您可以使用C#数组初始值设定项和简写(隐式数组初始化)。在下面的代码中,我将使用文件顶部的using System.Diagnostics;来减少名称空间:

var p = new [] { new Process(), new Process(), new Process() };

它们都创建数组并初始化元素。

答案 1 :(得分:0)

据我所知,如果你稍微改变一下你的解决方案,那么它会做你预期的任何事情。

我改变了一点你的解决方案,它运作正常。

static void Main(string[] args)
{
    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = "notepad.exe";
    for (int i = 0; i < 3; i++)
    {
        p.StartInfo.Arguments = $"d:\\text{i}.txt";
        p.Start();
        Console.WriteLine("Start run");
        p.WaitForExit();
        int result = p.ExitCode;
        Console.WriteLine("Return info:" + $"text{i}.txt created successfully!");
    }

    p.StartInfo.FileName = "explorer.exe";
    p.StartInfo.Arguments = "d:";
    p.Start();
}