Вы можете либо запустить фоновый поток или задачу и ожидать синхронно в цикле (используя WaitForExit), либо использовать асинхронный подход.
Создать объекты Process один за другим и подключить событиеобработчик события Exited, которое продолжается со следующим процессом.Создайте их с помощью конструктора Process, подключите обработчик события Exited и затем вызовите Start;в противном случае, используя статический Process.Start, если процесс завершается сбоем между временем, когда Process.Start возвращается, и обработчик события присоединен, я думаю, что обработчик события не будет вызван, поскольку он строго завершился.Подтверждение концепции: (не обрабатывает удаление, доступ к очереди не является потокобезопасным, хотя его должно быть достаточно, если он действительно последовательный и т. Д.)
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();
}