Estoy tratando de capturar la salida del proceso en "tiempo real" (mientras se está ejecutando). El código que uso es bastante simple (ver a continuación). Por algún extraño motivo, nunca se llama al evento OutputDataReceived. ¿Por qué?Capturar salida del proceso mediante el evento OutputDataReceived
private void button2_Click(object sender, EventArgs e)
{
// Setup the process start info
var processStartInfo = new ProcessStartInfo("ping.exe", "-t -n 3 192.168.100.1")
{
UseShellExecute = false,
RedirectStandardOutput = true
};
// Setup the process
mProcess = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
// Register event
mProcess.OutputDataReceived += OnOutputDataReceived;
// Start process
mProcess.Start();
mProcess.WaitForExit();
}
void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
//Never gets called...
}
Además, se requiere que el proces externos para limpiar su memoria intermedia de salida en el momento en que se da salida a algo. Sin descarga, la memoria intermedia de salida podría durar hasta que se salga del proceso externo; esto hace que sea imposible para la aplicación principal capturar la salida "en vivo". –
@BobKruithof: es verdad. El proceso externo realmente necesita enviar los datos, pero sin ninguna otra información es más fácil cumplir con la pregunta formulada. :) – Chris
Además, algunas aplicaciones están escribiendo en ERROR estándar en lugar de OUTPUT estándar. Por lo general, no se puede hacer una diferencia al mirar la salida manualmente. Por lo tanto, intente agregar solo en caso: "RedirectStandardError = true" y "mProcess.BeginErrorReadLine();", respectivamente. – altumano