55

プロセス出力を「リアルタイム」でキャプチャしようとしています(実行中)。私が使用するコードはかなり単純です(以下を参照)。奇妙な理由で、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...
    }
4

2 に答える 2

98

あなたは電話する必要があります

mProcess.BeginOutputReadLine();

BeginOutputReadLine-「アプリケーションのリダイレクトされたStandardOutputストリームで非同期読み取り操作を開始します。」

于 2012-07-24T14:00:09.220 に答える
2

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();
}
于 2016-01-31T21:03:46.157 に答える