passing - componente process c#



Espere até que um processo termine (6)

Como Jon Skeet diz, use o Process.Exited :

proc.StartInfo.FileName = exportPath + @"\" + fileExe;
proc.Exited += new EventHandler(myProcess_Exited);
proc.Start();
inProcess = true;

while (inProcess)
{
    proc.Refresh();
    System.Threading.Thread.Sleep(10);
    if (proc.HasExited)
    {
        inProcess = false;
    }
}

private void myProcess_Exited(object sender, System.EventArgs e)
{
    inProcess = false;
    Console.WriteLine("Exit time:    {0}\r\n" +
      "Exit code:    {1}\r\n", proc.ExitTime, proc.ExitCode);
}

Eu tenho um aplicativo que faz

Process.Start()

para iniciar outra aplicação 'ABC'. Eu quero esperar até que o aplicativo termine (processo morre) e continue minha execução. Como eu posso fazer isso?

Pode haver várias instâncias do aplicativo 'ABC' em execução ao mesmo tempo.


Answer #1

Eu acho que você só quer isso:

var process = Process.Start(...);
process.WaitForExit();

Veja a página do MSDN para o método. Ele também tem uma sobrecarga onde você pode especificar o tempo limite, então você não está esperando potencialmente para sempre.


Answer #2

Eu tive um caso em que Process.HasExited não mudou depois de fechar a janela pertencente ao processo. Então Process.WaitForExit() também não funcionou. Eu tive que monitorar Process.Responding que foi para false depois de fechar a janela assim:

while (!_process.HasExited && _process.Responding) {
  Thread.Sleep(100);
}
...

Talvez isso ajude alguém.


Answer #3

Tente isto:

string command = "...";
var process = Process.Start(command);
process.WaitForExit();

Answer #4

Você pode usar a espera para sair ou você pode pegar a propriedade HasExited e atualizar sua interface do usuário para manter o usuário "informado" (gerenciamento de expectativa):

System.Diagnostics.Process process = System.Diagnostics.Process.Start("cmd.exe");
while (!process.HasExited)
{
    //update UI
}
//done





process