首頁 > 後端開發 > C++ > 如何在.NET 中高效捕獲外部進程輸出?

如何在.NET 中高效捕獲外部進程輸出?

Barbara Streisand
發布: 2025-01-25 03:51:11
原創
502 人瀏覽過

How Can I Efficiently Capture External Process Output in .NET?

.NET 進程輸出擷取:全面指南

在.NET程式中執行外部命令或應用程式需要處理和捕獲其輸出。本指南深入探討了高效啟動子程序並在.NET中捕捉其標準輸出(STDOUT)的步驟和注意事項。

瞭解進程建立過程

要啟動子進程,請建立一個Process物件並配置其StartInfo屬性。 CreateNoWindow標誌確保進程在沒有控制台視窗的情況下運行,而RedirectStandardOutput則允許透過StandardOutput屬性擷取其輸出。

處理輸出資料

當子程序產生輸出時,將呼叫p.OutputDataReceived事件。若要接收和處理此輸出,請建立一個DataReceivedEventHandler委託並將其附加到事件。在此處理程序中,使用StreamReader讀取輸出並將其保存在字串或適當的資料結構中。

事件處理最佳化

非同步事件處理確保即使在從子進程捕獲輸出時,應用程式也能保持回應。透過使用process.BeginOutputReadLine(),您可以啟動專用執行緒來處理輸出數據,從而釋放主執行緒以執行其他任務。

直接讀取輸出

雖然事件處理對於即時監控非常有用,但更簡單的方法是使用p.StandardOutput.ReadToEnd()直接讀取輸出。此方法會阻塞,直到接收所有輸出,但這提供了一種直接的方法來一次捕獲所有輸出。

範例程式碼

這是一個捕獲MSBuild進程輸出的範例程式碼區塊:

<code class="language-csharp">Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.OutputDataReceived += (sender, args) => {
    if (!args.Data.StartsWith("MSBUILD") && !args.Data.StartsWith("Info")) {
        Console.WriteLine($"已接收输出: {args.Data}");
    }
};
process.Start();
process.BeginOutputReadLine();</code>
登入後複製

以上是如何在.NET 中高效捕獲外部進程輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板