Process.WaitForExit Метод

Определение

Задает период времени для ожидания завершения связанного процесса и блокирует текущий поток выполнения до того, как пройдет это время или процесс завершится. Чтобы избежать блокировки текущего потока, используйте событие Exited.

Примеры кода см. на следующих страницах справочника по свойствам StandardError и ExitCode.

Перегрузки

WaitForExit()

Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени.

WaitForExit(Int32)

Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах.

WaitForExit()

Дает компоненту 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 компонент специально не освобождает ресурсы. По этой причине каждый раз, когда вы вызываете Start Process экземпляр, вызовите Close , когда связанный процесс завершился, и вам больше не нужны административные сведения об этом. Close освобождает память, выделенную для выходного процесса.

См. также раздел

Применяется к

WaitForExit(Int32)

Дает компоненту 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" указывает неопределенно долгое ожидание.

Возвращаемое значение

Boolean

Значение true, если связанный процесс завершился; в противном случае — значение false.

Исключения

Нет доступа к параметру ожидания.

Не задан Id процесса, и Handle, из которого можно определить свойство Id, не существует.

-или- С этим объектом Process не связаны никакие процессы.

-или- Вы пытаетесь вызвать метод WaitForExit(Int32) для процесса, выполняющегося на удаленном компьютере. Этот метод доступен только для процессов, запущенных на локальном компьютере.

Параметр milliseconds является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.

Примеры

См. пример кода для ExitCode свойства.

Комментарии

WaitForExit(Int32) делает текущий поток ожиданием, пока связанный процесс не завершится. Он должен вызываться после вызова всех других методов в процессе. Чтобы избежать блокировки текущего потока, используйте событие Exited.

Этот метод указывает Process компоненту ждать ограниченного времени завершения процесса. Если связанный процесс не завершается к концу интервала, так как запрос на завершение отклоняется, false возвращается вызывающей процедуре. Вы можете указать Timeout.Infinite и millisecondsProcess.WaitForExit(Int32) вести себя так же, как перегрузкаWaitForExit(). Если передать 0 (ноль) методу, он возвращается true только в том случае, если процесс уже завершился; в противном случае он немедленно возвращается false.

Примечание

В платформа .NET Framework версии 3.5 и более ранних версий перегрузка milliseconds WaitForExit(Int32) MaxValue ждала миллисекунд (приблизительно 24 дня), а не на неопределенный срок.

При перенаправлении стандартных выходных данных в асинхронные обработчики событий возможно, что обработка выходных данных не будет завершена при возврате этого метода. Чтобы убедиться, что обработка асинхронных событий завершена, вызовите перегрузку WaitForExit() , которая не принимает параметр после получения от этой перегрузки true . Чтобы убедиться, что Exited событие обрабатывается правильно в Windows Forms приложениях, задайте SynchronizingObject свойство.

Когда связанный процесс завершается (завершает работу операционной системы через нормальное или ненормальное завершение), система сохраняет сведения об административном процессе и возвращается в вызываемый WaitForExit(Int32)компонент. Затем Process компонент может получить доступ к сведениям, включаемым ExitTimeв Handle процесс завершения.

Так как связанный процесс завершился, Handle свойство компонента больше не указывает на существующий ресурс процесса. Вместо этого дескриптор можно использовать только для доступа к сведениям операционной системы о ресурсе процесса. Система знает об дескрипторах для завершенных процессов, которые не были освобождены Process компонентами, поэтому она сохраняет ExitTime и Handle информацию в памяти, пока Process компонент специально не освобождает ресурсы. По этой причине каждый раз, когда вы вызываете Start Process экземпляр, вызовите Close , когда связанный процесс завершился, и вам больше не нужны административные сведения об этом. Close освобождает память, выделенную для выходного процесса.

См. также раздел

Применяется к