Redirección y de análisis en tiempo real la salida estándar de un largo proceso que se ejecuta en vb.net

StackOverflow https://stackoverflow.com/questions/2623028

Pregunta

Este código se ejecuta (una aplicación de línea de comandos) "handbrakecli" y coloca el resultado en una cadena:

Dim p As Process = New Process    
p.StartInfo.FileName = "handbrakecli"
p.StartInfo.Arguments = "-i [source] -o [destination]"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start

Dim output As String = p.StandardOutput.ReadToEnd
p.WaitForExit 

El problema es que esto puede tardar hasta 20 minutos para completar durante el cual nada se informó de nuevo al usuario. Una vez que se ha completado, van a ver toda la salida de la aplicación que incluye detalles del progreso. No es muy útil.

Por lo tanto estoy tratando de encontrar un ejemplo que muestra la mejor manera:

  1. Iniciar una aplicación externa (oculto)
  2. Monitorear su salida periódicamente ya que muestra información sobre el mismo de progreso (para que pueda extraer esta y presentar una barra de porcentaje agradable para el usuario)
  3. Determinar cuando la aplicación externa ha terminado (lo que no puedo continuar con mi propia ejecución de aplicaciones)
  4. Kill la aplicación externa si es necesario y detectar cuando esto ha ocurrido (de modo que si el usuario selecciona "Cancelar", consigo tomar las medidas apropiadas)

¿alguien tiene alguna fragmentos de código recomendada?

¿Fue útil?

Solución

La propiedad StandardOutput es de tipo StreamReader, que tiene métodos distintos de ReadToEnd. Sería más código, pero si se ha utilizado el método Read, que podría hacer otras cosas como proporcionar al usuario la oportunidad de cancelar o reportar algún tipo de progreso.

Enlace a Método de lectura con código de ejemplo:

http://msdn.microsoft. com / es-es / library / ath1fht8 (v = VS.90) .aspx

Editar:

La clase de proceso también tiene un método BeginOutputReadLine que es una llamada a un método asíncrono con devolución de llamada.

http: //msdn.microsoft.com/en-us/library/system.diagnostics.process.beginoutputreadline(v=VS.90).aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top