Ранее в статье Читаем стандартный вывод консольного приложения + DOS to UTF я писал как подключаться и читать стандартный вывод консольных приложений. Все это конечно работает хорошо, но есть один нюанс – событие на которое мы подписываемся (pr.OutputDataReceived += new DataReceivedEventHandler(sortOutputHandler)) возникает только тогда, когда в консольной программе происходит переход на новую строку. В этот момент нам возвращается весь буфер строки. А так, как в одной строке можно вывести кучу информации используя, например, служебный символ \b (backspace), то для чтения текста из консоли код из предыдущей статьи может и не подойти.
На помощь приходит следующее решение. Мы создаем свой поток и подключаем к нему стандартный вывод консоли. Далее мы просто читаем наш поток и разбираем его.
В следующем коде используются переменные: sr – наш поток, с которым мы работаем. nsize – количество символов, которые будут читаться за раз. buffer – массив в котором будут храниться кода символов. Сюда входят и служебные символы – переход на другую строку, backspace, tab и т.д. sOut – ассинхронный вызов. В данном случае служит как заглушка.