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

时间:2011-12-23 11:38:06

标签: c# process

我必须按顺序依次运行3个进程。第二个过程必须在第一个过程完成后开始。 我在C#工作。我已经使用了Process.Start()方法,它同时踢了所有。 任何人都可以帮助我。

6 个答案:

答案 0 :(得分:7)

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

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();
}

...

您还可以使用WaitForExit()方法,该方法在继续执行代码之前等待进程结束。但请注意,这会使您自己的进程停止执行,直到另一个进程终止。这可能会让您的用户界面无法响应,这可能是非常不受欢迎的。source

答案 1 :(得分:4)

Process.Start("yourprogram.exe").WaitForExit();
Process.Start("yournextprogram.exe").WaitForExit();

依旧......

答案 2 :(得分:2)

您可以通过响应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();
}

答案 3 :(得分:1)

为每个流程尝试此代码

Process.WaitForExit()

http://msdn.microsoft.com/en-us/library/aa326953(v=VS.71).aspx

答案 4 :(得分:0)

如果您使用的是.NET 4,则可以使用System.Threading.Tasks API。如果你的图表变得更复杂,你可能会从http://pdag.codeplex.com获得一些里程(我必须承认,这是我的工作)。

答案 5 :(得分:-1)

您需要执行process.join()以等待第一个进程完成,然后再提交下一个进程。但是,更大的问题是为什么你使用Process.Start() - 用于异步任务 - 当你真正希望它们同步运行时?只是打电话:

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

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