我有一个监听控制台标准输入流的程序。
- 返回时
Read()
,每个字符被一一读出并传递给method()
. method()
然后将字符附加到 aStringBuilder
。- 如果字符是
'\n'
,则method()
调用respond()
,它打印出读取的字符并清除StringBuilder
.
但是,即使在控制台中键入内容并按 Enter 后,我也必须在控制台焦点内按/移动鼠标、鼠标按钮或键盘,才能回显键入的文本。更神秘的是,当我在第一个花括号中设置断点Main()
并进入其后的每一条语句时,程序正确执行。我怎样才能解决这个问题?非常感谢!
public class test
{
static byte[] buffer = new byte[1];
static Stream instrm = Console.OpenStandardInput();
static Stream outstrm = Console.OpenStandardOutput();
static System.Text.StringBuilder sb = new System.Text.StringBuilder();
static void Main()
{
while (true)
{
instrm.Read(buffer, 0, 1);
method(buffer);
}
}
public static void method(byte[] buffer)
{
sb.Append(System.Text.Encoding.UTF8.GetString(buffer));
if (buffer[0] == (byte)10) respond();
}
public static void respond()
{
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(sb.ToString());
outstrm.Write(bytes, 0, bytes.Length);
outstrm.Flush();
sb.Clear();
}
}
编辑:
我刚刚测试并发现它与线程无关,所以把部分拿走了。我最初发布它是因为它在我的其他程序中是一个问题,这只是一个测试模型来演示它。