|
Как дождаться выполения процесса, запущенного из 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, что операционная система поддерживает до освобождения, что ручка полностью. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |