Process.WaitForExit Método

Definição

Define o período de espera para que o processo associado saia e bloqueia o thread de execução atual até que o tempo tenha passado ou o processo tenha terminado. Para evitar bloquear o tópico atual, use o Exited evento.

Para exemplos de código, consulte as StandardError páginas de referência de propriedades e ExitCode .

Sobrecargas

Name Description
WaitForExit()

Instrui o Process componente a esperar indefinidamente que o processo associado seja concluído.

WaitForExit(Int32)

Instrui o Process componente a esperar o número especificado de milissegundos para que o processo associado saia.

WaitForExit()

Instrui o Process componente a esperar indefinidamente que o processo associado seja concluído.

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

Exceções

A configuração de espera não podia ser acedida.

Não foi estabelecido nenhum processo Id , e não existe uma Handle propriedade a partir da qual a Id propriedade possa ser determinada.

-ou-

Não existe nenhum processo associado a este Process objeto.

-ou-

Está a tentar chamar WaitForExit() um processo que está a correr num computador remoto. Este método está disponível apenas para processos que estão a correr no computador local.

Exemplos

Consulte a secção de Observações da StandardError página de referência da propriedade.

Observações

WaitForExit() faz com que a thread atual espere até que o processo associado termine. Deve ser chamado depois de todos os outros métodos serem chamados no processo. Para evitar bloquear o tópico atual, use o Exited evento.

Este método instrui o Process componente a esperar um tempo infinito para que o processo e os gestores de eventos saiam. Isto pode fazer com que uma candidatura deixe de responder. Por exemplo, se chamar CloseMainWindow um processo que tenha uma interface de utilizador, o pedido ao sistema operativo para terminar o processo associado pode não ser tratado se o processo for escrito para nunca entrar no seu ciclo de mensagens.

Note

No .NET Framework 3.5 e versões anteriores, a sobrecarga WaitForExit() esperava por MaxValue milissegundos (aproximadamente 24 dias), não indefinidamente. Além disso, as versões anteriores não esperavam que os gestores de eventos saíssem caso o MaxValue tempo completo fosse atingido.

Esta sobrecarga garante que todo o processamento foi concluído, incluindo o tratamento de eventos assíncronos para saída padrão redirecionada. Deve usar esta sobrecarga após uma chamada para a WaitForExit(Int32) sobrecarga quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos.

Quando um processo associado sai (isto é, quando é desligado pelo sistema operativo através de uma terminação normal ou anormal), o sistema armazena informação administrativa sobre o processo e devolve ao componente que chamou WaitForExit(). O Process componente pode então aceder à informação, que inclui o ExitTime, usando o Handle para o processo finalizado.

Como o processo associado saiu, a Handle propriedade do componente já não aponta para um recurso de processo existente. Em vez disso, o handle pode ser usado apenas para aceder à informação do sistema operativo sobre o recurso do processo. O sistema está ciente dos handles dos processos encerrados que não foram libertados pelos Process componentes, por isso mantém a ExitTime informação e Handle na memória até que o Process componente liberte especificamente os recursos. Por esta razão, sempre que ligar Start para uma Process instância, ligue Close quando o processo associado terminar e já não precisar de qualquer informação administrativa sobre ele. Close liberta a memória alocada ao processo encerrado.

Ver também

Aplica-se a

WaitForExit(Int32)

Instrui o Process componente a esperar o número especificado de milissegundos para que o processo associado saia.

public:
 bool WaitForExit(int milliseconds);
public bool WaitForExit(int milliseconds);
member this.WaitForExit : int -> bool
Public Function WaitForExit (milliseconds As Integer) As Boolean

Parâmetros

milliseconds
Int32

O tempo, em milissegundos, para esperar que o processo associado termine. Um valor de 0 especifica um retorno imediato, e um valor de -1 indica uma espera infinita.

Devoluções

true se o processo associado tiver terminado; caso contrário, false.

Exceções

A configuração de espera não podia ser acedida.

Não foi estabelecido nenhum processo Id , e não existe uma Handle propriedade a partir da qual a Id propriedade possa ser determinada.

-ou-

Não existe nenhum processo associado a este Process objeto.

-ou-

Está a tentar chamar WaitForExit(Int32) um processo que está a correr num computador remoto. Este método está disponível apenas para processos que estão a correr no computador local.

milliseconds é um número negativo diferente de -1, o que representa um tempo limite infinito.

Exemplos

Veja o exemplo do código da ExitCode propriedade.

Observações

WaitForExit(Int32) faz com que a thread atual espere até que o processo associado termine. Deve ser chamado depois de todos os outros métodos serem chamados no processo. Para evitar bloquear o tópico atual, use o Exited evento.

Este método instrui o Process componente a esperar um tempo finito até que o processo termine. Se o processo associado não sair até ao final do intervalo porque o pedido de terminação foi negado, false é devolvido ao procedimento de chamada. Podes especificar Timeout.Infinite para milliseconds, e Process.WaitForExit(Int32) irá comportar-se da mesma forma que a WaitForExit() sobrecarga. Se passar 0 (zero) ao método, ele retorna true apenas se o processo já tiver terminado; caso contrário, retorna falseimediatamente .

Note

No .NET Framework 3.5 e versões anteriores, se milliseconds fosse -1, a sobrecarga WaitForExit(Int32) esperava por MaxValue milissegundos (aproximadamente 24 dias), não indefinidamente.

Quando a saída padrão foi redirecionada para manipuladores de eventos assíncronos, é possível que o processamento de saída não tenha sido concluído quando este método regressar. Para garantir que o tratamento assíncrono de eventos foi concluído, chame a WaitForExit() sobrecarga que não toma nenhum parâmetro após receber a true dessa sobrecarga. Para ajudar a garantir que o evento Exited é tratado corretamente nas Windows Forms aplicações, defina a propriedade SynchronizingObject.

Quando um processo associado sai (é desligado pelo sistema operativo através de uma terminação normal ou anormal), o sistema armazena informação administrativa sobre o processo e devolve ao componente que chamou WaitForExit(Int32). O Process componente pode então aceder à informação, que inclui o ExitTime, usando o Handle para o processo finalizado.

Como o processo associado saiu, a Handle propriedade do componente já não aponta para um recurso de processo existente. Em vez disso, o handle pode ser usado apenas para aceder à informação do sistema operativo sobre o recurso do processo. O sistema está ciente dos handles dos processos encerrados que não foram libertados pelos Process componentes, por isso mantém a ExitTime informação e Handle na memória até que o Process componente liberte especificamente os recursos. Por esta razão, sempre que ligar Start para uma Process instância, ligue Close quando o processo associado terminar e já não precisar de qualquer informação administrativa sobre ele. Close liberta a memória alocada ao processo encerrado.

Ver também

Aplica-se a