Подождите, пока процесс не завершится

У меня есть приложение, которое делает

Process.Start()

чтобы запустить другое приложение "ABC". Я хочу дождаться окончания этого приложения (процесс умирает) и продолжить выполнение. Как я могу это сделать?

В то же время может работать несколько экземпляров приложения "ABC".

Ответ 1

Я думаю, вы просто этого хотите:

var process = Process.Start(...);
process.WaitForExit();

См. страницу

Ответ 2

Использовать Process.WaitForExit? Или подписаться на Process.Exited, если вы не хотите блокировать? Если это не делает то, что вы хотите, пожалуйста, сообщите нам дополнительную информацию о ваших требованиях.

Ответ 3

В моем приложении я делаю следующее:

Process process = new Process();
process.StartInfo.FileName = executable;
process.StartInfo.Arguments = arguments;
process.StartInfo.ErrorDialog = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;
process.Start();
process.WaitForExit(1000 * 60 * 5);    // Wait up to five minutes.

Есть несколько дополнительных функций, которые вы можете найти полезными...

Ответ 4

Вы можете использовать wait for exit или вы можете поймать свойство HasExited и обновить свой пользовательский интерфейс, чтобы пользователь "информировал" (управление ожиданиями):

System.Diagnostics.Process process = System.Diagnostics.Process.Start("cmd.exe");
while (!process.HasExited)
{
    //update UI
}
//done

Ответ 5

Process.WaitForExit должен быть именно тем, что вы ищете, я думаю.

Ответ 6

У меня был случай, когда Process.HasExited не изменился после закрытия окна, принадлежащего процессу. Так что Process.WaitForExit() тоже не работал. Мне пришлось отслеживать Process.Responding, который пошел на false после закрытия окна следующим образом:

while (!_process.HasExited && _process.Responding) {
  Thread.Sleep(100);
}
...

Возможно, это помогает кому-то.

Ответ 7

Как говорит Джон Скит, используйте Process.Exited:

proc.StartInfo.FileName = exportPath + @"\" + fileExe;
proc.Exited += new EventHandler(myProcess_Exited);
proc.Start();
inProcess = true;

while (inProcess)
{
    proc.Refresh();
    System.Threading.Thread.Sleep(10);
    if (proc.HasExited)
    {
        inProcess = false;
    }
}

private void myProcess_Exited(object sender, System.EventArgs e)
{
    inProcess = false;
    Console.WriteLine("Exit time:    {0}\r\n" +
      "Exit code:    {1}\r\n", proc.ExitTime, proc.ExitCode);
}

Ответ 8

Попробуйте следующее:

string command = "...";
var process = Process.Start(command);
process.WaitForExit();