Process.WaitForExit Метод

Определение

Задает период времени для ожидания завершения связанного процесса и блокирует текущий поток выполнения до того, как пройдет это время или процесс завершится.Sets the period of time to wait for the associated process to exit, and blocks the current thread of execution until the time has elapsed or the process has exited. Чтобы избежать блокировки текущего потока, используйте событие Exited.To avoid blocking the current thread, use the Exited event.

Примеры кода см. на следующих страницах справочника по свойствам StandardError и ExitCode.For code examples, see the StandardError and the ExitCode property reference pages.

Перегрузки

WaitForExit()

Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени.Instructs the Process component to wait indefinitely for the associated process to exit.

WaitForExit(Int32)

Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах.Instructs the Process component to wait the specified number of milliseconds for the associated process to exit.

WaitForExit()

Дает компоненту Process команду ожидать завершения связанного процесса в течение неограниченного времени.Instructs the Process component to wait indefinitely for the associated process to exit.

public:
 void WaitForExit();
public void WaitForExit ();
member this.WaitForExit : unit -> unit
Public Sub WaitForExit ()

Исключения

Нет доступа к параметру ожидания.The wait setting could not be accessed.

Не задан Id процесса, и Handle, из которого можно определить свойство Id, не существует.No process Id has been set, and a Handle from which the Id property can be determined does not exist.

-или--or- С этим объектом Process не связаны никакие процессы.There is no process associated with this Process object.

-или--or- Вы пытаетесь вызвать метод WaitForExit() для процесса, выполняющегося на удаленном компьютере.You are attempting to call WaitForExit() for a process that is running on a remote computer. Этот метод доступен только для процессов, запущенных на локальном компьютере.This method is available only for processes that are running on the local computer.

Примеры

См. раздел "Примечания" StandardError на странице справочника по свойствам.See the Remarks section of the StandardError property reference page.

Комментарии

WaitForExit() делает текущий поток ожидающим, пока связанный процесс не завершится.WaitForExit() makes the current thread wait until the associated process terminates. Он должен вызываться после вызова всех других методов в процессе.It should be called after all other methods are called on the process. Чтобы избежать блокировки текущего потока, используйте событие Exited.To avoid blocking the current thread, use the Exited event.

Этот метод указывает Process компоненту ожидать бесконечное количество времени для завершения работы обработчиков процессов и событий.This method instructs the Process component to wait an infinite amount of time for the process and event handlers to exit. Это может привести к тому, что приложение перестает отвечать на запросы.This can cause an application to stop responding. Например, при вызове CloseMainWindow для процесса, имеющего пользовательский интерфейс, запрос к операционной системе для завершения связанного процесса может не обрабатываться, если процесс записывается, чтобы никогда не вводить его цикл обработки сообщений.For example, if you call CloseMainWindow for a process that has a user interface, the request to the operating system to terminate the associated process might not be handled if the process is written to never enter its message loop.

Примечание

В .NET Framework 3,5.NET Framework 3.5 и более ранних версиях WaitForExit() перегрузка ожидала MaxValue миллисекунды (приблизительно 24 дня), а не бесконечно.In the .NET Framework 3,5.NET Framework 3.5 and earlier versions, the WaitForExit() overload waited for MaxValue milliseconds (approximately 24 days), not indefinitely. Кроме того, предыдущие версии не ожидают завершения обработчиков событий, если MaxValue было достигнуто полное время.Also, previous versions did not wait for the event handlers to exit if the full MaxValue time was reached.

Эта перегрузка гарантирует, что вся обработка завершена, включая обработку асинхронных событий для перенаправленного стандартного вывода.This overload ensures that all processing has been completed, including the handling of asynchronous events for redirected standard output. Эту перегрузку следует использовать после вызова WaitForExit(Int32) перегрузки, когда стандартный вывод перенаправляется в асинхронные обработчики событий.You should use this overload after a call to the WaitForExit(Int32) overload when standard output has been redirected to asynchronous event handlers.

Когда связанный процесс завершается (т. е. при завершении работы операционной системой через нормальное или аварийное завершение), система хранит административную информацию о процессе и возвращает его вызвавшему компоненту WaitForExit() .When an associated process exits (that is, when it is shut down by the operation system through a normal or abnormal termination), the system stores administrative information about the process and returns to the component that had called WaitForExit(). ProcessЗатем компонент может получить доступ к информации, которая включает в себя ExitTime , используя Handle для завершения процесса.The Process component can then access the information, which includes the ExitTime, by using the Handle to the exited process.

Поскольку связанный процесс завершился, Handle свойство компонента больше не указывает на существующий ресурс процесса.Because the associated process has exited, the Handle property of the component no longer points to an existing process resource. Вместо этого этот маркер можно использовать только для доступа к информации операционной системы о ресурсе процесса.Instead, the handle can be used only to access the operating system's information about the process resource. Система осведомлена о дескрипторах завершенных процессов, которые не были освобождены Process компонентами, поэтому они хранятся ExitTime Handle в памяти, пока Process компонент специально не освободит ресурсы.The system is aware of handles to exited processes that have not been released by Process components, so it keeps the ExitTime and Handle information in memory until the Process component specifically frees the resources. По этой причине при каждом вызове Start для Process экземпляра вызывается, Close когда связанный процесс завершается и больше не требуется никаких административных сведений о нем.For this reason, any time you call Start for a Process instance, call Close when the associated process has terminated and you no longer need any administrative information about it. Close освобождает память, выделенную для завершенного процесса.Close frees the memory allocated to the exited process.

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

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

WaitForExit(Int32)

Дает компоненту Process команду ожидать завершения связанного процесса в течение указанного времени в миллисекундах.Instructs the Process component to wait the specified number of milliseconds for the associated process to exit.

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

Количество времени в миллисекундах для ожидания завершения связанного процесса.The amount of time, in milliseconds, to wait for the associated process to exit. Значение "0" указывает немедленный возврат, а значение "-1" указывает неопределенно долгое ожидание.A value of 0 specifies an immediate return, and a value of -1 specifies an infinite wait.

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

Boolean

Значение true, если связанный процесс завершился; в противном случае — значение false.true if the associated process has exited; otherwise, false.

Исключения

Нет доступа к параметру ожидания.The wait setting could not be accessed.

Не задан Id процесса, и Handle, из которого можно определить свойство Id, не существует.No process Id has been set, and a Handle from which the Id property can be determined does not exist.

-или--or- С этим объектом Process не связаны никакие процессы.There is no process associated with this Process object.

-или--or- Вы пытаетесь вызвать метод WaitForExit(Int32) для процесса, выполняющегося на удаленном компьютере.You are attempting to call WaitForExit(Int32) for a process that is running on a remote computer. Этот метод доступен только для процессов, запущенных на локальном компьютере.This method is available only for processes that are running on the local computer.

Параметр milliseconds является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.milliseconds is a negative number other than -1, which represents an infinite time-out.

Примеры

См. пример кода для ExitCode Свойства.See the code example for the ExitCode property.

Комментарии

WaitForExit(Int32) делает текущий поток ожидающим, пока связанный процесс не завершится.WaitForExit(Int32) makes the current thread wait until the associated process terminates. Он должен вызываться после вызова всех других методов в процессе.It should be called after all other methods are called on the process. Чтобы избежать блокировки текущего потока, используйте событие Exited.To avoid blocking the current thread, use the Exited event.

Этот метод дает Process компоненту команду ожидать конечное количество времени для завершения процесса.This method instructs the Process component to wait a finite amount of time for the process to exit. Если связанный процесс не выходит за конец интервала, поскольку запрос на завершение отклоняется, false возвращается в вызывающую процедуру.If the associated process does not exit by the end of the interval because the request to terminate is denied, false is returned to the calling procedure. Можно указать Timeout.Infinite для milliseconds , и Process.WaitForExit(Int32) будет вести себя так же, как WaitForExit() перегрузка.You can specify Timeout.Infinite for milliseconds, and Process.WaitForExit(Int32) will behave the same as the WaitForExit() overload. Если в метод передается значение 0 (ноль), то он возвращается только в том true случае, если процесс уже завершился. в противном случае он немедленно возвращает значение false .If you pass 0 (zero) to the method, it returns true only if the process has already exited; otherwise, it immediately returns false.

Примечание

В .NET Framework 3,5.NET Framework 3.5 и более ранних версиях, если milliseconds имел значение-1, WaitForExit(Int32) перегрузка ожидала MaxValue миллисекунды (примерно 24 дня), а не бесконечно.In the .NET Framework 3,5.NET Framework 3.5 and earlier versions, if milliseconds was -1, the WaitForExit(Int32) overload waited for MaxValue milliseconds (approximately 24 days), not indefinitely.

Если стандартные выходные данные перенаправляются в асинхронные обработчики событий, то, возможно, обработка выходных данных не будет завершена при возврате из этого метода.When standard output has been redirected to asynchronous event handlers, it is possible that output processing will not have completed when this method returns. Чтобы обеспечить завершение асинхронной обработки событий, вызовите WaitForExit() перегрузку, которая не принимает параметр после получения true из этой перегрузки.To ensure that asynchronous event handling has been completed, call the WaitForExit() overload that takes no parameter after receiving a true from this overload. Чтобы обеспечить Exited правильную обработку события в Windows Forms приложениях, задайте SynchronizingObject свойство.To help ensure that the Exited event is handled correctly in Windows Forms applications, set the SynchronizingObject property.

Когда связанный процесс завершает работу (завершает работу операционной системой через нормальное или аварийное завершение), система хранит административную информацию о процессе и возвращает его в компонент, который вызывал WaitForExit(Int32) .When an associated process exits (is shut down by the operating system through a normal or abnormal termination), the system stores administrative information about the process and returns to the component that had called WaitForExit(Int32). ProcessЗатем компонент может получить доступ к информации, которая включает в себя ExitTime , используя Handle для завершения процесса.The Process component can then access the information, which includes the ExitTime, by using the Handle to the exited process.

Поскольку связанный процесс завершился, Handle свойство компонента больше не указывает на существующий ресурс процесса.Because the associated process has exited, the Handle property of the component no longer points to an existing process resource. Вместо этого этот маркер можно использовать только для доступа к информации операционной системы о ресурсе процесса.Instead, the handle can be used only to access the operating system's information about the process resource. Система осведомлена о дескрипторах завершенных процессов, которые не были освобождены Process компонентами, поэтому они хранятся ExitTime Handle в памяти, пока Process компонент специально не освободит ресурсы.The system is aware of handles to exited processes that have not been released by Process components, so it keeps the ExitTime and Handle information in memory until the Process component specifically frees the resources. По этой причине при каждом вызове Start для Process экземпляра вызывается, Close когда связанный процесс завершается и больше не требуется никаких административных сведений о нем.For this reason, any time you call Start for a Process instance, call Close when the associated process has terminated and you no longer need any administrative information about it. Close освобождает память, выделенную для завершенного процесса.Close frees the memory allocated to the exited process.

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

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