首頁 >後端開發 >C++ >如何在.NET中高效捕獲控制台應用程式輸出?

如何在.NET中高效捕獲控制台應用程式輸出?

Barbara Streisand
Barbara Streisand原創
2025-01-25 03:31:36256瀏覽

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