如何在Process.StandardOutput中禁用输出缓冲

这个问题不止一次被问过,但我没有在任何讨论中找到满意的答案。

我正在启动一个命令行过程,它可以对STDOUT进行实时测量,大约每秒产生一个新结果。 使用System.Diagnostics.Process.StandardOutput导致完全不可接受的延迟(超过20秒),因为STDOUT数据通过Process.StandardOutput StreamReader中的4k缓冲区工作,并且似乎没有任何方法可以解决这个问题。

调用Process.StandardOutput.BaseStream.Flush()不起作用。

我试过对Process.StandardOutput进行逐字节同步读取,但是我仍然比实际输出落后4k。

任何人至少可以validation我有可能以某种方式克服我重定向STDOUT时遇到的所有缓冲问题,并且一旦它出现在shell窗口中就会在我的应用程序中接收数据吗? 我可以inheritanceProcess类并更改StandardOutput流读取器的行为吗? 我是否需要查看原始WINAPI调用?

不知何故,这必须要完成,即使我最终编写非托管C ++来启动任务并使用输出,并将其连接起来。任何帮助都非常感谢; 我的智慧结束了……

编辑:看来我需要的是可用于C / C ++,Perl,Python和Java的“期望”库的.Net实现(这是迄今为止我发现的唯一库)。 有谁知道这样的野兽是否存在?

“[我有一种方法可以启动它,以至于它没有意识到它正被重定向?” 是的:这正是Expect的领域。 我知道没有.Net实施; 这肯定是可行的,但……