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