Чтение потока консоли постоянно в C # - PullRequest
6 голосов
/ 18 февраля 2011

Я хочу прочитать продолжение выходного потока cmd в c #.Я знаю, что могу перенаправить стандартный поток вывода и прочитать его.Ниже приведен код:

        System.Diagnostics.ProcessStartInfo pi= new System.Diagnostics.ProcessStartInfo(ProgramPATH,Params);
        pi.RedirectStandardOutput = true;
        pi.UseShellExecute = false;
        pi.CreateNoWindow = true;

        System.Diagnostics.Process proc= new System.Diagnostics.Process();
        proc.StartInfo = pi;
        proc.Start();

        string result = proc.StandardOutput.ReadToEnd();

Но это дает весь вывод сразу.Что если я введу команду ping с аргументом -t?Как я могу читать этот поток постоянно?

1 Ответ

12 голосов
/ 18 февраля 2011

Вы звоните ReadToEnd, который, очевидно, будет блокироваться до завершения процесса.Вместо этого вы можете повторно звонить Read или ReadLine.Тем не менее, вы должны рассмотреть возможность или сделать это в другом потоке или , используя для этого такие события, как OutputDataReceived.(Если вы используете события, вам нужно вызвать BeginOutputReadLine, чтобы включить события - подробности см. В примерах MSDN.)

Причина возможного чтения в другом потокечто если вам нужно прочитать из как стандартную ошибку , так и стандартный вывод, вы должны убедиться, что процесс не заполняет свой буфер - в противном случае он может блокироваться при записи, что приводит к тупиковой ситуации.Использование асинхронного подхода упрощает эту задачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...