.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中文網其他相關文章!