Имя: Пароль:
IT
 
Как дождаться выполения процесса, запущенного из C#?
0 megabax
 
07.12.16
22:28
Добрый день. Пытаюсь из C# запустить процесс:
            
//Запускаем процесс
            proc.StartInfo.FileName = "SpecificPoints.exe";
            proc.StartInfo.Arguments = index.ToString() + ".har " + frames[index].file_name + " 100";
            proc.Start();

Проблема в том, что после выполнения proc.Start(); программа идет дальше и не ждет, пока этот процесс завершиться. подскажите пожалуйста, как сделать так чтобы программа не шла дальше, пока не завершиться процесс?
1 Torquader
 
07.12.16
22:30
А что вы хотели - получайте состояние процесса и ждите, пока он работает.
2 Лефмихалыч
 
07.12.16
22:32
(1) а, там, коллбэков в этом вашем сисярпе нет что ли? Были ж вроде какие-то делегаты или как их там, чертей этих?..
3 Torquader
 
07.12.16
22:36
(2) Это, всего лишь, другой способ ожидания.
4 Лефмихалыч
 
07.12.16
22:37
(3) боюсь, что автор воспримет слово "ожидание" буквально и станет циклы пустые от одного до миллиона гонять...
5 Torquader
 
07.12.16
22:39
(4) А что, до функции Sleep он ещё не дочитал ?
Потом - вопрос - что он хочет делать после ожидания.
CallBack будет хорош, чтобы после завершения продолжить алгоритм, но, иногда нужно срубить процесс, который слишком долго выполняется.
6 Кирпич
 
07.12.16
23:05
7 H A D G E H O G s
 
08.12.16
00:09
(0)
CreateProcess()
WaitForSingleObject()
8 ttandr
 
08.12.16
00:28
(5) Там же вроде как запуск приложения с параметром, судя
frames[index].file_name
[index]
в цикле

Кстати, тоже интересует, как дождаться пока выполнится приложение с параметрами цв цикле...
9 Serginio1
 
08.12.16
10:07
proc.WaitForExit();

Так же можно пописываться на события
http://stackoverflow.com/questions/139593/processstartinfo-hanging-on-waitforexit-why
10 Serginio1
 
08.12.16
10:15
https://msdn.microsoft.com/ru-ru/library/system.diagnostics.process.exited(v=vs.110).aspx

Гугл переводчик






1248/5000
E: System.Diagnostics.Process.Exited событие указывает на то, что соответствующий процесс завершается. Это явление означает, что либо процесс завершается (прерванный) или успешно закрыта. Это событие может произойти только тогда, когда значение P: Свойство System.Diagnostics.Process.EnableRaisingEvents верно.
Есть два способа получения уведомления при выходе из связанного процесса: синхронно и асинхронно. Синхронный уведомление означает вызов M: метод System.Diagnostics.Process.WaitForExit (System.Int32), чтобы блокировать текущий поток до тех пор пока процесс не завершит работу. Асинхронное уведомление использует E: System.Diagnostics.Process.Exited событие, которое позволяет вызывающий поток продолжить выполнение в то же время. В последнем случае, P: System.Diagnostics.Process.EnableRaisingEvents должен быть установлен верно для вызывающего приложения, чтобы получить событие Exited.
Когда операционная система завершает работу процесса, он уведомляет все другие процессы, которые зарегистрировали обработчики для события возбужденном. В это время, дескриптор процесса, который только что вышел может быть использован для доступа к некоторым свойствам, такие как P: System.Diagnostics.Process.ExitTime и P: System.Diagnostics.Process.HasExited, что операционная система поддерживает до освобождения, что ручка полностью.