Подождите, пока процесс закончится
У меня есть приложение, которое делает
Process.Start()
для запуска другого приложения 'ABC'. Я хочу дождаться окончания этого приложения (процесс умирает) и продолжить выполнение. Как я могу это сделать?
там может быть несколько экземпляров приложения " ABC " работает одновременно.
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