Process.WaitForExit Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Задает период времени для ожидания завершения связанного процесса и блокирует текущий поток выполнения до того, как пройдет это время или процесс завершится. Чтобы избежать блокировки текущего потока, используйте событие Exited.
Примеры кода см. на следующих страницах справочника по свойствам StandardError и ExitCode.
Перегрузки
WaitForExit() |
Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени. |
WaitForExit(Int32) |
Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах. |
WaitForExit(TimeSpan) |
Указывает компоненту Процесса подождать указанное количество времени, пока связанный процесс завершит работу. |
WaitForExit()
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени.
public:
void WaitForExit();
public void WaitForExit ();
member this.WaitForExit : unit -> unit
Public Sub WaitForExit ()
Исключения
Нет доступа к параметру ожидания.
Не задан Id процесса, и Handle, из которого можно определить свойство Id, не существует.
-или-
С этим объектом Process не связаны никакие процессы.
-или-
Вы пытаетесь вызвать метод WaitForExit() для процесса, выполняющегося на удаленном компьютере. Этот метод доступен только для процессов, запущенных на локальном компьютере.
Примеры
См. раздел Примечания на странице справочника по StandardError свойству.
Комментарии
WaitForExit() заставляет текущий поток ждать завершения связанного процесса. Он должен вызываться после вызова всех остальных методов в процессе. Чтобы избежать блокировки текущего потока, используйте событие Exited.
Этот метод указывает компоненту Process ждать бесконечное количество времени для завершения процесса и обработчиков событий. Это может привести к тому, что приложение перестанет отвечать на запросы. Например, при вызове CloseMainWindow процесса с пользовательским интерфейсом запрос к операционной системе на завершение связанного процесса может не обрабатываться, если процесс записан так, чтобы он никогда не входил в свой цикл сообщений.
Примечание
В платформа .NET Framework 3.5 и более ранних версиях перегрузка WaitForExit() ждала MaxValue миллисекунд (приблизительно 24 дня), а не бесконечно. Кроме того, в предыдущих версиях не ожидалось завершения работы обработчиков событий при достижении полного MaxValue времени.
Эта перегрузка гарантирует, что вся обработка завершена, включая обработку асинхронных событий для перенаправленных стандартных выходных данных. Эту перегрузку следует использовать после вызова перегрузки, WaitForExit(Int32) когда стандартные выходные данные перенаправляются в асинхронные обработчики событий.
При выходе связанного процесса (то есть при завершении работы операционной системой в результате нормального или аномального завершения) система сохраняет административные сведения о процессе и возвращается к компоненту, который вызвал WaitForExit(). Затем Process компонент может получить доступ к информации, которая включает в ExitTimeсебя , с помощью Handle для завершенного процесса.
Так как связанный процесс завершился, Handle свойство компонента больше не указывает на существующий ресурс процесса. Вместо этого дескриптор можно использовать только для доступа к сведениям операционной системы о ресурсе процесса. Система знает о дескрипторов для завершенных процессов, которые не были освобождены компонентами Process , поэтому она хранит ExitTime сведения и Handle в памяти до тех пор, пока Process компонент не освободит ресурсы. По этой причине каждый раз, когда вы вызываете StartProcess экземпляр, вызовите Close , когда связанный процесс завершился и вам больше не нужны какие-либо административные сведения о нем. Close освобождает память, выделенную для завершенного процесса.
См. также раздел
Применяется к
WaitForExit(Int32)
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах.
public:
bool WaitForExit(int milliseconds);
public bool WaitForExit (int milliseconds);
member this.WaitForExit : int -> bool
Public Function WaitForExit (milliseconds As Integer) As Boolean
Параметры
- milliseconds
- Int32
Количество времени в миллисекундах для ожидания завершения связанного процесса. Значение "0" указывает немедленный возврат, а значение "-1" указывает неопределенно долгое ожидание.
Возвращаемое значение
Значение true
, если связанный процесс завершился; в противном случае — значение false
.
Исключения
Нет доступа к параметру ожидания.
Не задан Id процесса, и Handle, из которого можно определить свойство Id, не существует.
-или-
С этим объектом Process не связаны никакие процессы.
-или-
Вы пытаетесь вызвать метод WaitForExit(Int32) для процесса, выполняющегося на удаленном компьютере. Этот метод доступен только для процессов, запущенных на локальном компьютере.
Параметр milliseconds
является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.
Примеры
См. пример кода для ExitCode свойства .
Комментарии
WaitForExit(Int32) заставляет текущий поток ждать завершения связанного процесса. Он должен вызываться после вызова всех остальных методов в процессе. Чтобы избежать блокировки текущего потока, используйте событие Exited.
Этот метод указывает компоненту Process ждать завершения процесса в течение ограниченного времени. Если связанный процесс не завершается к концу интервала, так как запрос на завершение отклоняется, false
возвращается вызывающей процедуре. Можно указать Timeout.Infinite для milliseconds
, и Process.WaitForExit(Int32) будет вести себя так же, как перегрузка WaitForExit() . Если передать 0 (ноль) в метод, он возвращается true
только в том случае, если процесс уже завершился; в противном случае он немедленно возвращает .false
Примечание
В платформа .NET Framework 3.5 и более ранних версиях, если milliseconds
значение было -1, перегрузка WaitForExit(Int32) ждала MaxValue миллисекунд (приблизительно 24 дня), а не бесконечно.
Если стандартные выходные данные были перенаправлены в асинхронные обработчики событий, возможно, обработка выходных данных не будет завершена при возврате этого метода. Чтобы убедиться, что асинхронная обработка событий завершена, вызовите перегрузку WaitForExit() , которая не принимает параметр после получения true
от этой перегрузки . Чтобы обеспечить правильную обработку Exited события в Windows Forms приложениях, задайте SynchronizingObject свойство .
Когда связанный процесс завершается (завершается операционной системой через обычное или аномальное завершение), система сохраняет административные сведения о процессе и возвращается к компоненту, который вызвал WaitForExit(Int32). Затем Process компонент может получить доступ к информации, которая включает в ExitTimeсебя , с помощью Handle для завершенного процесса.
Так как связанный процесс завершился, Handle свойство компонента больше не указывает на существующий ресурс процесса. Вместо этого дескриптор можно использовать только для доступа к сведениям операционной системы о ресурсе процесса. Система знает о дескрипторов для завершенных процессов, которые не были освобождены компонентами Process , поэтому она хранит ExitTime сведения и Handle в памяти до тех пор, пока Process компонент не освободит ресурсы. По этой причине каждый раз, когда вы вызываете StartProcess экземпляр, вызовите Close , когда связанный процесс завершился и вам больше не нужны какие-либо административные сведения о нем. Close освобождает память, выделенную для завершенного процесса.
См. также раздел
Применяется к
WaitForExit(TimeSpan)
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
- Исходный код:
- Process.cs
Указывает компоненту Процесса подождать указанное количество времени, пока связанный процесс завершит работу.
public:
bool WaitForExit(TimeSpan timeout);
public bool WaitForExit (TimeSpan timeout);
member this.WaitForExit : TimeSpan -> bool
Public Function WaitForExit (timeout As TimeSpan) As Boolean
Параметры
- timeout
- TimeSpan
Время ожидания завершения связанного процесса.
Возвращаемое значение
Значение true
, если связанный процесс завершился; в противном случае — значение false
.
Комментарии
См. WaitForExit(Int32) примечания.