我有一个如下所示的应用程序,由另一个控制台应用程序通过一个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
在这里使用()
当您启动一个过程时,您可以通过两个选项等待它完成:
Process.WaitForExit()方法.
Process.Exited事件.
完成此过程后,您可以处理结果并使用它来发送电子邮件.
如果您想等待每个进程,请像这样修改您的代码.Al进程将等到上一个结束:
for (int i=0;i<10;i++) { var process = Process.Start("Process.exe"); process.WaitForExit(); }
如果您想等到所有进程都完成,请尝试此操作.所有进程将同时运行.
var processes = new List(); for (int i=0;i<10;i++) { var process = Process.Start("Process.exe"); processes.Add(process); } foreach(var process in processes) proccess.WaitForExit();