Process.WaitForExit Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.