Tengo una aplicación que hace
Process.Start()
para iniciar otra aplicación 'ABC'. Quiero esperar hasta que la aplicación finalice (el proceso muere) y continuar con mi ejecución. ¿Cómo puedo hacerlo?
Puede haber varias instancias de la aplicación 'ABC' ejecutándose al mismo tiempo.
Respuestas:
Creo que solo quieres esto:
Vea la página de MSDN para el método. También tiene una sobrecarga donde puede especificar el tiempo de espera, por lo que potencialmente no está esperando para siempre.
fuente
Uso
Process.WaitForExit
? ¿O suscribirse alProcess.Exited
evento si no desea bloquear? Si eso no hace lo que desea, bríndenos más información sobre sus requisitos.fuente
WaitForExit
primero ... en algunos casos, es posible que desee ejecutar más código cuando algo termine, pero eso no significa que deba bloquear el hilo actual.Process.Exited
evento, creo que debe configurar el proceso de antemano estableciéndoloProcess.EnableRaisingEvents
en verdadero. Sin embargo, teniendo en cuenta que esta pregunta tiene más de tres años, puede ser queProcess.EnableRaisingEvents
no era una cosa en el momento en que se hizo.Process.Exited
evento. ¡Gracias! +1 para completarHago lo siguiente en mi solicitud:
Hay algunas características adicionales allí que pueden serle útiles ...
fuente
Puede usar esperar para salir o puede capturar la propiedad HasExited y actualizar su IU para mantener al usuario "informado" (gestión de expectativas):
fuente
Tuve un caso en el
Process.HasExited
que no cambió después de cerrar la ventana perteneciente al proceso. EntoncesProcess.WaitForExit()
tampoco funcionó. Tuve que controlarProcess.Responding
que fue falso después de cerrar la ventana así:Quizás esto ayude a alguien.
fuente
Process.WaitForExit debería ser justo lo que estás buscando, creo.
fuente
En referencia al ejemplo de Microsoft: [ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
Lo mejor sería establecer:
de lo contrario, el Código será bloqueado. Además, no se necesitan propiedades adicionales.
fuente
Como dice Jon Skeet, use el
Process.Exited
:fuente
Prueba esto:
fuente