我正在我的 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.
我可能在做什么导致这个属性表现得如此糟糕?