プロセスの出力を(リアルタイムで)(実行中に)キャプチャしようとしています。私が使用するコードはかなり単純です(以下を参照)。何らかの奇妙な理由で、OutputDataReceivedイベントが呼び出されることはありません。どうして?
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...
}
電話する必要があります
mProcess.BeginOutputReadLine();
BeginOutputReadLine -"リダイレクトされたアプリケーションのStandardOutputストリームで非同期読み取り操作を開始します。"
void ExecuteCommand(string cmdpath, string cmdargs)
{
string command = cmdpath + " " + cmdargs;
tabc_results.SelectTab(1);
DoConsole("\r\nCmd>> " + command + "\r\n");
var processInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe", "/c " + command);
processInfo.CreateNoWindow = true;
processInfo.UseShellExecute = false;
processInfo.RedirectStandardError = true;
processInfo.RedirectStandardOutput = true;
var process = System.Diagnostics.Process.Start(processInfo);
process.OutputDataReceived += (
object sender, System.Diagnostics.DataReceivedEventArgs e
) => DoConsole("stdout>> " + e.Data + "\r\n");
//Console.WriteLine("output>>" + e.Data);
process.BeginOutputReadLine();
process.ErrorDataReceived += (
object sender, System.Diagnostics.DataReceivedEventArgs e
) =>DoConsole("stderr>> " + e.Data + "\r\n");
//Console.WriteLine("error>>" + e.Data);
process.BeginErrorReadLine();
process.WaitForExit();
DoConsole("retcode>> " + process.ExitCode.ToString() + "\r\n");
//Console.WriteLine("ExitCode: {0}", process.ExitCode);
process.Close();
}