Этот вопрос задавался более одного раза, но я не нашел удовлетворительного ответа ни в одном из этих обсуждений.
Я запускаю процесс командной строки, который производит измерение в реальном времени для STDOUT, производя новый результат примерно каждую секунду. Использование System.Diagnostics.Process.StandardOutput приводит к совершенно неприемлемому запаздыванию (более 20 секунд), поскольку данные STDOUT работают через буфер 4 КБ в Process.StandardOutput StreamReader, и, похоже, нет никакого способа обойти это. 1003 *
Вызов Process.StandardOutput.BaseStream.Flush () не работает.
Я попытался выполнить побитовое байтовое синхронное чтение Process.StandardOutput, но я все еще на 4 КБ от фактического вывода.
Может ли кто-нибудь хотя бы проверить для меня, что можно как-то преодолеть все проблемы с буферизацией, возникающие у меня с перенаправлением STDOUT, и получить данные в моем приложении, как только они появятся в окне оболочки? Могу ли я наследовать от класса Process и изменить поведение потокового считывателя StandardOutput? Нужно ли смотреть на необработанные вызовы WINAPI?
Так или иначе, это должно быть сделано, даже если я в конечном итоге напишу неуправляемый C ++, чтобы запустить задачу и использовать вывод, и связать ее. Любая помощь очень ценится; Я нахожусь в конце моего ума ...
Редактировать: Мне кажется, что мне нужна .Net реализация ожидаемых библиотек, доступных для C / C ++, Perl, Python и Java (это единственные, которые я нашел до сих пор). Кто-нибудь знает, существует ли такой зверь?