我正在嘗試啟動一個外部命令列應用程式并獲取該命令列應用程式的輸出,但OutputDataReceived沒有按預期觸發
為了說明問題,我使用 ping.exe 以便其他人可以重現它,但實際應用程式是我們使用的第三方應用程式,我想決議應用程式回傳的資訊、警告、錯誤和進度訊息。
如果您運行命令“ping.exe localhost”,您將獲得如下所示的輸出,這就是我想要獲得的這種輸出
用 32 位元組的資料 ping my.local.computer.name [::1]:
來自 ::1 的回復:時間<1ms
來自 ::1 的回復:時間<1ms
來自 ::1 的回復:時間<1ms
來自 :: 的回復1:時間<1ms::1 的 Ping 統計資訊:
資料包:已發送 = 4,已接收 = 4,丟失 = 0(丟失 0%),
以毫秒為單位的近似往返時間:
最小值 = 0 毫秒,最大值 = 0 毫秒,平均值 = 0毫秒
using var process = new Process();
var processInfo = new ProcessStartInfo("ping.exe", "localHost");
processInfo.UseShellExecute = false;
processInfo.CreateNoWindow = true;
processInfo.RedirectStandardOutput = true;
processInfo.RedirectStandardError = true;
process.StartInfo = processInfo;
process.EnableRaisingEvents = true;
process.OutputDataReceived = (sender, args) => Console.WriteLine(args.Data);
process.ErrorDataReceived = (sender, args) => Console.WriteLine(args.Data);
process.Exited = (sender, args) => Console.WriteLine("ping finished.");
process.Start();
await process.WaitForExitAsync();
使用上面的代碼,我希望從 獲取OutputDataReceived每一行輸出ping.exe的事件,但是,唯一被觸發的事件是Exited事件。
uj5u.com熱心網友回復:
您缺少對 process.BeginOutputReadLine(); 的呼叫
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/496272.html
