如何确保在c#中完成两个进程

时间:2016-01-04 16:32:32

标签: c# .net process console-application

我有一个如下所示的应用程序,它由另一个控制台应用程序通过Process.Start()方法(即通过两个参数)在循环中触发两次。这里有第三种方法Lastmethod();将发送邮件包含startfirst();startsecond();的输出。但我不知道如何在完成前两种方法后触发第三种方法。我设置了两个标志,但通过发送部分结果的邮件(没有完成前两种方法)显示有些时候是正确的并且有时错误的结果

static void Main(string[] args)
{
    bool first = false;
    bool second = false;
    if (args[0] == "test")
    {
        startfirst();//time consuming process which will trigger internal child process
        first = true;
    }
    if (args[0] == "finish")
    {
        startsecond();//time consuming process which will trigger internal child process
        second =true;
    }
    if(first && second)
    {
        Lastmethod();
    }
        Console.ReadLine();
    }

    private static void Lastmethod()
    {
        //sending mail of the out put of startfirst(); and  startsecond(); method
    }

    private static void startsecond()
    {
        //time consuming first operation
    }

    private static void startfirst()
    {
        //time consuming second operation
    }
}   

修改 假设我开始多次说出10个相同的过程,如

for (int i=0;i<10;i++)
{
Process.Start("Process.exe");
}

我将如何检查完成情况?我可以在这里使用WaitForExit()

2 个答案:

答案 0 :(得分:5)

当你开始一个过程时,你可以等到它完成两个选项:

  1. Process.WaitForExit()方法。
  2. Process.Exited事件。
  3. 完成此过程后,您可以处理结果并使用它来发送电子邮件。

    如果您想等待每个进程,请像这样修改您的代码。 Al进程将等到上一个结束:

    for (int i=0;i<10;i++)
    {
        var process = Process.Start("Process.exe");
        process.WaitForExit();
    }
    

    如果您想等到所有流程完成,请尝试此操作。所有流程都将同时运行。

    var processes = new List<Process>();
    for (int i=0;i<10;i++)
    {
        var process = Process.Start("Process.exe");
        processes.Add(process);
    }
    foreach(var process in processes)
        proccess.WaitForExit();
    

答案 1 :(得分:1)

像这样:

var processes = new List<Process>();
for (int i=0; i < 10; i++)
    processes.Add(Process.Start("process.exe"));

foreach (Process p in processes)
    p.WaitForExit();

在询问之前,请花点时间阅读documentation of the Process class