Поделиться через


Process.WaitForExit Метод

Определение

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

Примеры кода см. на StandardErrorExitCode страницах ссылок на свойства.

Перегрузки

Имя Описание
WaitForExit()

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

WaitForExit(Int32)

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

WaitForExit(TimeSpan)

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

WaitForExit()

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

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

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

WaitForExit(Int32)

Исходный код:
Process.cs
Исходный код:
Process.cs
Исходный код:
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 указывает бесконечное ожидание.

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

Значение в противном случае .

Исключения

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

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

–или–

Процесс не связан с этим Process объектом.

–или–

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

milliseconds — отрицательное число, отличное от -1, которое представляет бесконечное время ожидания.

Примеры

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

Комментарии

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

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

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

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

WaitForExit(TimeSpan)

Исходный код:
Process.cs
Исходный код:
Process.cs
Исходный код:
Process.cs
Исходный код:
Process.cs
Исходный код:
Process.cs

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

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

Время ожидания завершения связанного процесса.

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

Значение в противном случае .

Комментарии

См WaitForExit(Int32) . примечания.

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