您可以启动后台线程或任务并在循环中同步等待(使用 WaitForExit),也可以使用异步方法。
一个一个地创建 Process 对象,并将事件处理程序连接到 Exited 事件,该事件将继续执行下一个 Process。使用 Process 构造函数创建它们,挂钩 Exited 事件处理程序,然后调用 Start;否则,使用静态 Process.Start,如果进程在 Process.Start 返回和附加事件处理程序之间失败,我认为事件处理程序不会被调用,因为它已经严格退出。
概念验证:(不处理 Dispose,队列访问不是线程安全的,尽管如果它确实是串行的就足够了,等等)
Queue<Process> ProcessesToRun = new Queue<Process>(new []{ new Process("1"), new Process("2"), new Process("3") });
void ProcessExited(object sender, System.EventArgs e) {
GrabNextProcessAndRun();
}
void GrabNextProcessAndRun() {
if (ProcessesToRun.Count > 0) {
Process process = ProcessesToRun.Dequeue();
process.Exited += ProcessExited;
process.Start();
}
}
void TheEntryPoint() {
GrabNextProcessAndRun();
}