如何确保在c#中完成两个进程
How to make sure the completion of two process in c#
我有一个如下所示的应用程序,它由另一个控制台应用程序通过 Process.Start()
方法(即通过两个参数)在两个循环中触发 times.Here 还有第三种方法 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 事件。
处理完成后,您可以处理结果并将其用于发送您的e-mail。
如果您想按进程等待,请像这样修改您的代码。所有进程将等到上一个进程完成:
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();
像这样:
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。
我有一个如下所示的应用程序,它由另一个控制台应用程序通过 Process.Start()
方法(即通过两个参数)在两个循环中触发 times.Here 还有第三种方法 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 事件。
处理完成后,您可以处理结果并将其用于发送您的e-mail。
如果您想按进程等待,请像这样修改您的代码。所有进程将等到上一个进程完成:
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();
像这样:
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。