「リアルタイム」(プロセスの実行中)でプロセス出力を取得しようとしています。私が使用するコードはかなりシンプルです(下記参照)。いくつかの奇妙な理由で、OutputDataReceivedイベントが呼び出されることはありません。どうして?OutputDataReceivedイベントを介したプロセス出力のキャプチャ
あなたがmProcess.BeginOutputReadLine();
BeginOutputReadLineを呼び出す必要が
private void button2_Click(object sender, EventArgs e)
{
// Setup the process start info
var processStartInfo = new ProcessStartInfo("ping.exe", "-t -n 3 192.168.100.1")
{
UseShellExecute = false,
RedirectStandardOutput = true
};
// Setup the process
mProcess = new Process { StartInfo = processStartInfo, EnableRaisingEvents = true };
// Register event
mProcess.OutputDataReceived += OnOutputDataReceived;
// Start process
mProcess.Start();
mProcess.WaitForExit();
}
void OnOutputDataReceived(object sender, DataReceivedEventArgs e)
{
//Never gets called...
}
、外部プロセスへは、それが何かを出力した瞬間に、その出力バッファをフラッシュする必要があります。フラッシングなしでは、出力バッファは外部プロセスが終了するまで持続することができます。これにより、メインアプリケーションが出力 "ライブ"をキャプチャすることが不可能になります。 –
@BobKruithof:十分に真実。外部プロセスは実際にデータを送信する必要がありますが、その他の情報は一切不要です。 :) – Chris
また、標準のOUTPUTの代わりに標準のERRORに書き込むアプリケーションもあります。通常、出力を手動で見るときは違いはありません。ですから、「RedirectStandardError = true」と「mProcess.BeginErrorReadLine();」の場合にのみ追加してみてください。 – altumano