首页 >后端开发 >C++ >如何在.NET中有效捕获控制台应用程序输出?

如何在.NET中有效捕获控制台应用程序输出?

Barbara Streisand
Barbara Streisand原创
2025-01-25 03:31:36254浏览

How to Efficiently Capture Console Application Output in .NET?

在 .NET 中捕获进程输出

在 .NET 中启动一个控制台应用程序子进程并捕获其输出,可以使用以下方法:

<code class="language-csharp">string retMessage = string.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();

startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;

startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;

p.StartInfo = startInfo;
p.Start();

p.OutputDataReceived += (sender, args) => retMessage += args.Data;

// 开始异步输出读取。
p.BeginOutputReadLine();

p.WaitForExit();

return retMessage;</code>

此方法使用 OutputDataReceived 事件处理程序将接收到的输出追加到字符串 (retMessage) 中。我们调用 BeginOutputReadLine() 来启动输出的异步读取。默认情况下,WaitForExit() 会阻塞直到子进程退出,从而允许完全捕获输出。

另一种直接读取输出的方法是:

<code class="language-csharp">return p.StandardOutput.ReadToEnd();</code>

这种更简单的方法在许多情况下都足够了,但需要注意的是,它一次性读取所有输出,如果输出很大,可能会阻塞执行线程。使用事件处理程序方法可以提供异步输出捕获。

以上是如何在.NET中有效捕获控制台应用程序输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn