Вывод CMD в реальном времени не показывает весь вывод - PullRequest
0 голосов
/ 19 апреля 2019

Я создаю приложение диспетчера серверов Winform (для использования с steamcmd) в C #, и я хочу перенаправить вывод steamcmd в richtextbox или текстовое поле, чтобы не создавалось никаких дополнительных окон, и я все еще могу видеть, что происходит внутри моего приложение.

Проблема в том, что код, который я использую, отлично работает для нативных команд cmd, таких как ping -t www.google.com, например. Он выводит строки одну за другой в режиме реального времени, но при использовании steamcmd выводит только до определенной точки (и даже тогда не показывает все). Однако, если я запускаю те же самые команды в cmd, он показывает все, что происходит в steamcmd.

Если я закрываю консольное приложение (где я тестирую), оно показывает все до закрытия, но не при нормальном запуске.

Вот примеры (В этом случае я заставляю обновление на моем сервере)

Это то, что он выводит во время работы (в данном конкретном случае он показывает весь вывод после завершения, но не в реальном времени): http://prntscr.com/ndyr8a

Это то, что он показывает, когда я принудительно закрываю его (что он и предполагает выводить в реальном времени, однако, он просто добавляет все, что отсутствует, и, очевидно, не в правильном порядке): http://prntscr.com/ndyrnv

И это то, что предполагалось показывать в реальном времени: http://prntscr.com/ndysml

Как я могу изменить свой код, чтобы он отображался правильно в реальном времени? Заранее спасибо

var process = new Process();
var startinfo = new ProcessStartInfo("cmd.exe", @"/C " + Path + steamcmd_arguments);
startinfo.RedirectStandardOutput = true;
startinfo.UseShellExecute = false;
process.StartInfo = startinfo;
process.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
...