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

mjl*_*007 5 .net stdout process

我正在产生一个在可见控制台窗口中运行的子进程(它是一个运行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();
Run Code Online (Sandbox Code Playgroud)

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

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

Arn*_*hea 3

一旦您重定向标准输出,它就不再指向控制台。要写入控制台,您必须手动执行。

如果您想在流程执行时显示输出,而不是在最后显示 1 个大转储,您可以使用 Process 类的“OutputDataReceived”事件。