Eu tenho um aplicativo que faz
Process.Start()
para iniciar outra aplicação 'ABC'. Eu quero esperar até que o aplicativo termine (processo acabe) e continue minha execução. Como eu posso fazer isso?
Pode haver várias instâncias do aplicativo 'ABC' sendo executadas ao mesmo tempo.
Respostas:
Eu acho que você só quer isso:
Veja a página do MSDN para o método Ele também possui uma sobrecarga na qual é possível especificar o tempo limite, para que você não esteja potencialmente esperando para sempre.
fonte
Usar
Process.WaitForExit
? Ou inscreva-se noProcess.Exited
evento se você não deseja bloquear? Se isso não fizer o que você deseja, forneça mais informações sobre seus requisitos.fonte
WaitForExit
primeiro ... em alguns casos, você pode querer executar mais código quando algo terminar, mas isso não significa que você precise bloquear o segmento atual.Process.Exited
evento, acredito que você deve configurar o processo antecipadamente, definindoProcess.EnableRaisingEvents
como true. No entanto, considerando que essa pergunta tem mais de três anos, pode ser que issoProcess.EnableRaisingEvents
não tenha acontecido no momento em que foi feita.Process.Exited
evento. Obrigado! +1 para completarEu faço o seguinte no meu aplicativo:
Existem alguns recursos extras que você pode achar úteis ...
fonte
Você pode usar aguardar a saída ou capturar a propriedade HasExited e atualizar sua interface do usuário para manter o usuário "informado" (gerenciamento de expectativas):
fonte
Eu tive um caso em
Process.HasExited
que não mudou depois de fechar a janela pertencente ao processo. EntãoProcess.WaitForExit()
também não funcionou. Eu tive que monitorarProcess.Responding
que foi falso depois de fechar a janela assim:Talvez isso ajude alguém.
fonte
Process.WaitForExit deve ser exatamente o que você está procurando, eu acho.
fonte
Referindo-se ao exemplo da Microsoft: [ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
O melhor seria definir:
Caso contrário, o Código será bloqueado. Também não são necessárias propriedades adicionais.
fonte
Como Jon Skeet diz, use o
Process.Exited
:fonte
Tente o seguinte:
fonte