我必须按顺序依次运行3个进程。第二个过程必须在第一个过程完成后开始。 我在C#工作。我已经使用了Process.Start()方法,它同时踢了所有。 任何人都可以帮助我。
答案 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)
答案 4 :(得分:0)
如果您使用的是.NET 4,则可以使用System.Threading.Tasks API。如果你的图表变得更复杂,你可能会从http://pdag.codeplex.com获得一些里程(我必须承认,这是我的工作)。
答案 5 :(得分:-1)
您需要执行process.join()以等待第一个进程完成,然后再提交下一个进程。但是,更大的问题是为什么你使用Process.Start() - 用于异步任务 - 当你真正希望它们同步运行时?只是打电话:
a();
b();
c();
将一个接一个地运行它们。