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



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



Process.Start()


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



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

809   8  

8 ответов:

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

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

посмотреть страница MSDN для данного метода. Он также имеет перегрузку, где вы можете указать тайм-аут, так что вы потенциально не ждете вечно.

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

Я делаю следующее мое заявление:

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.

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

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

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

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

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

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

Как говорит Джон Скит, используйте 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);
}

попробуйте это:

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

Comments

    Ничего не найдено.