C# 如何通过代码顺序启动进程

C# 如何通过代码顺序启动进程,c#,process,C#,Process,我必须依次运行3个进程。第二道工序必须在第一道工序完成后开始。 我在C#工作。我使用了Process.Start()方法,它在同一时间启动所有进程。 有人能帮我吗。一种方法是为第一个进程的事件添加一个处理程序,然后从那里开始第二个进程 void StartProcessOne() { Process p = Process.Start("foo", "bar"); p.Exited += (sender, e) => StartProcessTwo(); p.Sta

我必须依次运行3个进程。第二道工序必须在第一道工序完成后开始。 我在C#工作。我使用了Process.Start()方法,它在同一时间启动所有进程。
有人能帮我吗。

一种方法是为第一个进程的事件添加一个处理程序,然后从那里开始第二个进程

void StartProcessOne() {
    Process p = Process.Start("foo", "bar");
    p.Exited += (sender, e) => StartProcessTwo();
    p.Start();
}

void StartProcessTwo() {
    Process p = Process.Start("foo2", "bar2");
    p.Exited += (sender, e) => StartProcessThree();
    p.Start();
}

...

您还可以使用该方法,它在继续执行代码之前等待进程结束。但是,请注意,这会使您自己的进程停止执行,直到另一个进程终止。这会给您留下一个没有响应的用户界面等,这可能是非常不可取的。(

您需要执行一个进程。join()等待第一个进程完成,然后再提交下一个进程。然而,更大的问题是,为什么要在实际希望异步任务同步运行时使用Process.Start()?只是打电话:

a();
b();
c();

将一个接一个地运行它们。

请为每个进程尝试此代码

Process.WaitForExit()


依此类推……

您可以通过响应Process.Exited事件来完成此操作。
您应该使用这种方法而不是WaitForExit(),因为后者会阻止您的程序响应用户输入等。

private int n = 0;

private void StartAProcess()
{
    Process process = new Process {
        StartInfo = {FileName = "cmd.exe", Arguments = "pause"}, 
        EnableRaisingEvents = true};
    process.Exited += process_Exited;
    process.Start();
    n++;
}

void process_Exited(object sender, EventArgs e)
{
    if (n < 3) StartAProcess();
}
private int n=0;
私有void StartAProcess()
{
流程=新流程{
StartInfo={FileName=“cmd.exe”,Arguments=“pause”},
EnableRaisingEvents=true};
process.Exited+=进程_已退出;
process.Start();
n++;
}
已退出无效进程(对象发送方,事件参数)
{
如果(n<3)startProcess();
}

如果您使用的是.NET 4,则可以使用System.Threading.Tasks API。如果您的图形变得更复杂,您可能会从中获得一些经验(我必须承认,这是我的工作)。

请发布您当前的代码和您迄今为止尝试过的内容。使用时应注意UI应用程序流程,在某些情况下,可以跳过流程退出,se评论MSDN的一部分如果他有一个用户界面(我强烈怀疑),这种方法是不可取的,因为根据MSDN,它会阻止所有用户输入。
System.Diagnostics.Process
没有
Join()
method.OK-WaitForExit。我应该检查一下。与@Sebastian的答案相同的问题也适用于这里:这将阻止所有用户输入,而这可能不是OP试图完成的。@codesparkle我回答了OP提出的问题,为什么在你不知道比其他人更多的细节时进行向下投票?您的方法也可以工作,但除非我们有更多的细节,否则这段代码没有问题。问题是,在我能想到的几乎每一个用例中,上面的场景都是不受欢迎的。即使它是一个控制台应用程序,他也可能希望在运行进程时显示一些状态信息。好的,但我仍然认为应该为没有帮助的答案保留否决票,这符合OP的要求。。。
private int n = 0;

private void StartAProcess()
{
    Process process = new Process {
        StartInfo = {FileName = "cmd.exe", Arguments = "pause"}, 
        EnableRaisingEvents = true};
    process.Exited += process_Exited;
    process.Start();
    n++;
}

void process_Exited(object sender, EventArgs e)
{
    if (n < 3) StartAProcess();
}