Получение данных из Process.StandardOutput на лету
Я пытаюсь получить данные из Process.StandardOutput ... но у меня есть проблема: я получаю данные, когда процесс заканчивается, но не во время выполнения (не сбрасывает ли он???) . Похоже, данные где-то в буфере. Когда я запускаю процесс вручную, сообщения появляются во время выполнения. Как исправить?
1 ответ
Это то, что я использую, чтобы получить вывод из процесса. Это добавляет к строителю строки, но вы могли бы сделать другие вещи.
private void RunWithOutput(string exe, string parameters, out string result, out int exitCode)
{
ProcessStartInfo startInfo = new ProcessStartInfo(exe, parameters);
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardOutput = true;
Process p = new Process();
p.StartInfo = startInfo;
p.Start();
StringBuilder sb = new StringBuilder();
object locker = new object();
p.OutputDataReceived += new DataReceivedEventHandler(delegate(object sender, DataReceivedEventArgs args)
{
lock(locker)
{
sb.Append(args.Data);
}
} );
p.ErrorDataReceived += new DataReceivedEventHandler(delegate(object sender, DataReceivedEventArgs args)
{
lock (locker)
{
sb.Append(args.Data);
}
});
p.BeginErrorReadLine();
p.BeginOutputReadLine();
p.WaitForExit();
result = sb.ToString();
exitCode = p.ExitCode;
}