- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在我的 C# 应用程序中启动一个进程,该进程运行一个控制台应用程序。我已经重定向了标准输入和输出,并且能够通过 StandardOutput.ReadLine() 读取几行。我确信我已正确配置 ProcessStartInfo。
控制台应用程序在启动时会输出几行(以“标记”行结尾),然后等待输入。收到输入后,它再次输出几行(再次以“标记”行结尾),依此类推。我的意图是从中读取行,直到收到“标记”行,此时我知道发送适当的输入字符串。
我的问题是,经过几次迭代后,程序挂起。暂停调试器往往会将挂起置于对 StandardOutput.EndOfStream 的调用中。下面的测试代码就是这种情况:
while (!mProcess.StandardOutput.EndOfStream) // Program hangs here.
{
Console.WriteLine(mProcess.StandardOutput.ReadLine());
}
当我测试“标记”行时,如果我在读取该行后尝试访问 StandardOutput.EndOfStream,我会遇到同样的挂起:
string line = "";
while (!isMarker(line))
{
line = mProcess.StandardOutput.ReadLine();
}
bool eos = mProcess.StandardOutput.EndOfStream; // Program hangs here.
我可能做了什么导致此属性表现如此糟糕?
最佳答案
您不能在这里可靠地使用 EndOfStream。 StreamReader.EndOfStream 属性将调用 StandardOutput.Read() 如果它没有缓冲任何字符。如果进程未向其输出管道发送任何内容且未关闭它,则 Read() 调用将阻塞。这几乎可以保证发生,因为它将等待输入。在进程关闭输出管道的末端并且 StreamReader 消耗完所有缓冲字符之前,EndOfStream 不会返回 true。在程序终止时。
使用 BeginOutputReadLine() 可能是检测“标记”线的更好方法。请注意回调发生在另一个线程上。另请注意,不必等待进程发送标记,您写入的任何内容都将被缓冲,直到进程准备好读取它。请注意缓冲区很小,可能会出现死锁。
关于c# - StandardOutput.EndOfStream 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2767496/
在MSE例子中,播放前调用endOfstream mediaSource.endOfStream(); video.play() https://developer.mozilla.org/en-US
我正在尝试使用代码(粘贴在下面)读取文本文件,但文件的最后一行没有被读取。我的逻辑正确吗? using (StreamReader reader = new StreamReader(
我编写了一个转换过滤器,它不会将前四帧的样本传递给渲染器,因为我在队列中提取和存储数据。因为对转换方法的调用等于帧数,所以我的最后 3 帧数据没有被调用并且数据丢失。如何解决 EndOfStream
BinaryReader 没有 EndOfStream 属性。使用以下代码检查是否已到达流结尾是否安全? reader.BaseStream.Length>reader.BaseStream.Posi
我正在我的 C# 应用程序中启动一个进程,该进程运行一个控制台应用程序。我已经重定向了标准输入和输出,并且能够通过 StandardOutput.ReadLine() 读取几行。我确信我已正确配置 P
所以我正在做一个项目,我正在读取配置文件。配置文件只是一个字符串列表,如“D 1 1”、“C 2 2”等。现在我还没有用 C# 进行过读/写,所以我在网上查找它希望找到某种形式的演绎C/C++ .eo
我正在编写一个大型应用程序,其中涉及来自进程或文件流的一些流。下面有两个示例,展示了检测流结束的不同方法。我很好奇有什么区别以及哪一个最好使用?效率或性能有什么区别吗?另外,在 .NET 引用指南中,
我正在使用一个使用 web 服务来推送一些事件的客户端 - web 服务的设计是这样的,即在客户端发布订阅命令时,它会发回一些感兴趣的事件并继续这样做只要客户端保持连接。 当 POST 命令时,服务会
正如标题所说,我发现了一个问题。先说小故事:我们的 file.txt 看起来像这样: aaaabb ccccddd eeeefffffff 有很多方法可以逐行阅读这段文字,其中一种是: StreamR
首先我明白我可以用不同的方式解决这个问题。我想这个问题的存在只是因为以不正确的方式使用了不同的方法。但我想知道在我的示例中到底发生了什么。 我正在使用 StreamReader 读取文件。为了从中获取
---简短版本:当我每次进入 while (!checkReader.EndOfStream) 时,它都会显示 EndOfStream = true。 ---更多细节:用户将使用 Ajax Async
我想在解析 XML 文档之前检测它的编码。所以我在堆栈上找到了overflow这个脚本。 public static XElement GetXMLFromStream(Stream uploadSt
我有一个 webrequest 可以创建与服务器的持久(保持事件)连接,例如: webRequest.ContentType = "application/x-www-form-urlencoded"
我写了这个小程序,它从 Random.txt 中每隔 5 个字符读取一次在 random.txt 中,我有一行文本:ABCDEFGHIJKLMNOPRST。我得到了预期的结果: A的位置为0 F的位置
我写了一个简单的测试项目,打开9123端口一段时间后退出: import java.io.IOException; import java.net.InetSocketAddress; import
我是一名优秀的程序员,十分优秀!