.net – 捕获标准输出并仍然在控制台窗口中显示它

我正在产生一个在可见控制台窗口中运行的子进程(它是一个运行MSBuild的批处理文件),我想让进程生成的输出显示在可见的控制台窗口中,并捕获该输出所以我可以在代码中处理它.我已经阅读了其他几个问题以及处理ProcessStartInfo.RedirectStandardOutput等的MSDN文档,我可以捕获重定向流的输出并在代码中处理它就好了:

Process msBuild = new Process();
msBuild.StartInfo.FileName = "Build.bat";
msBuild.StartInfo.UseShellExecute = false;
msBuild.StartInfo.RedirectStandardOutput = true;
msBuild.Start();
string output = msBuild.StandardOutput.ReadToEnd();
msBuild.WaitForExit();

问题是输出不会显示在子进程的控制台窗口中;我只是在进程运行时屏幕上出现一个空白的控制台窗口,它在完成时消失.

我想我可以隐藏实际的子进程窗口,并显示第二个窗口,我只是将输出写入捕获时,但这似乎比必要的工作更多.有没有办法让输出显示在控制台窗口中,并在完成后仍然捕获它以进行处理?

最佳答案
一旦你重定向标准,它就不再指向控制台了.要写入控制台,您必须手动执行此操作.

如果要在进程执行时显示输出,而不是最后一个大转储,则可以使用Process类的“OutputDataReceived”事件.

转载注明原文:.net – 捕获标准输出并仍然在控制台窗口中显示它 - 代码日志