我有一个程序可以监听控制台stdin流。
- 当
Read()
返回时,每个字符都被逐一读出并传递给method()
- 然后CCD_ 3将该字符附加到CCD_
- 如果字符是
'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();
}
}
编辑:
我只是测试了一下,发现它与螺纹无关,所以把零件拿走了。我最初发布它是因为它在我的另一个程序中是一个问题,这只是一个演示它的测试模型
我会这样更改程序:
static byte[] buffer = new byte[1];
static TextReader instrm = new StreamReader(Console.OpenStandardInput());
static TextWriter outstrm = new StreamWriter(Console.OpenStandardOutput());
static StringBuilder sb = new StringBuilder();
static void Main()
{
while (true)
{
var readLine = instrm.ReadLine();
respond(readLine);
}
}
public static void respond(string line)
{
outstrm.Write(line);
outstrm.Flush();
}
它更容易而且有效。主要区别是使用StreamReader
和StreamWriter
代替Stream
。