I'm running an exe (which writes to output and error), from another. How do I process / catch that output in the order that it has been written?
For example, in the below code, if I run OutputTest.exe I get
out line 1error line 1out line 2error line 2
But if I run ProcessTest.exe I get
error line 1error line 2out line 1out line 2
Thanks in advance,
James-- Code --
OutputTest.exe
static void Main(string[] args){ Console.Out.WriteLine("out line 1"); Console.Out.Flush(); Console.Error.WriteLine("error line 1"); Console.Error.Flush(); Console.Out.WriteLine("out line 2"); Console.Out.Flush(); Console.Error.WriteLine("error line 2"); Console.Error.Flush();}
ProcessTest.exe
private void runButton_Click(object sender, EventArgs e){ this.backgroundWorker1.RunWorkerAsync(); while (this.backgroundWorker1.IsBusy) { Application.DoEvents(); }}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e){ using (Process proc = new Process()) { proc.StartInfo.FileName = "OutputTest.exe"; proc.StartInfo.WorkingDirectory = Application.StartupPath; proc.StartInfo.UseShellExecute = false; proc.StartInfo.CreateNoWindow = true; proc.StartInfo.RedirectStandardError = true; proc.StartInfo.RedirectStandardOutput = true; proc.ErrorDataReceived += new DataReceivedEventHandler(ProcessErrorHandler); proc.OutputDataReceived += new DataReceivedEventHandler(ProcessOutputHandler); proc.Start(); proc.BeginErrorReadLine(); proc.BeginOutputReadLine(); proc.WaitForExit(); proc.Close(); }}
private void ProcessErrorHandler(object sendingProcess, DataReceivedEventArgs outLine){ Console.WriteLine(outLine.Data);}private void ProcessOutputHandler(object sendingProcess, DataReceivedEventArgs outLine){ Console.WriteLine(outLine.Data);}