Estoy usando VBOXMANAGE para "exportar" una máquina invitada. VBOXManage es una aplicación de consola que puede controlar el comportamiento de la máquina invitada desde el host. Desde el comando de exportación es un proceso largo, devuelve las actualizaciones de proceso de esta manera:Redirección de salida de consola en tiempo real usando el proceso
0% ... 10% ... 20% ... 30% ... 100%
estoy escribiendo una Aplicación C# que invocará VBOXManage usando Process. Aquí está mi código:
Process VBOXProc = new Process();
VBOXProc.StartInfo.FileName = VBOXMANAGE;
VBOXProc.StartInfo.Arguments = Arguments;
VBOXProc.StartInfo.UseShellExecute = false;
VBOXProc.StartInfo.CreateNoWindow = true;
VBOXProc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
VBOXProc.StartInfo.RedirectStandardError = true;
VBOXProc.StartInfo.RedirectStandardOutput = true;
VBOXProc.OutputDataReceived += new DataReceivedEventHandler(VBOXProc_OutputDataReceived);
VBOXProc.ErrorDataReceived += new DataReceivedEventHandler(VBOXProc_ErrorDataReceived);
VBOXProc.EnableRaisingEvents = true;
VBOXProc.Start();
VBOXProc.BeginOutputReadLine();
VBOXProc.BeginErrorReadLine();
VBOXProc.WaitForExit();
Esto está bien, excepto que la salida se lee por LINEA. Esto significa que las actualizaciones del proceso " 0% ... 10% ... 20% ... 30% ... 100%" solo se mostrarán DESPUÉS de que se complete el proceso.
¿Hay alguna manera de capturar la salida de la consola en tiempo real?
Gracias!
Tenga en cuenta el nombre de la función: BeginOutput * ReadLine * –
Sí, gracias nobugz por esa maravillosa idea. ;) – Ian
Un par de declaraciones 'With' harían que ese código fuera mucho más fácil para los ojos (y el portapapeles) ...' Con VBOXProc ... Con .StartInfo ... End With ... End With'. – Basic