我正在编写一个C#应用程序,可以启动第三方命令行可执行文件,并将它们的标准输出重定向到RichTextBox。
通过使用process.OutputDataReceived事件,我能够成功地重定向输出。我有一个队列,将每一行推入队列中,然后我使用计时器定期将所有排队的行转储到RichTextBox中。
这对于一些第三方程序来说运行得很完美。
问题出现在写入单个控制台行多次的程序上。例如: 5% -> 10% -> 25%等...(不断覆盖相同的位置) 我想这是通过不使用换行符,而是简单地返回到行的开头并覆盖先前的字符来完成的。
问题是OutputDataReceived似乎没有任何方法指示是否应该应用新行,因此我的RichTextBox输出只是在新行上进行多次更新。 例如: 5% 10% 25% 等等...
有没有办法判断标准输出是进入新行还是同一行?
Process.StandardOutput
不是一个流本身,而是一个TextReader
,它从流中解码数据。但是,是的,你可以直接从中读取;请参见我下面发布的答案。 - Peter Duniho