c#stdin读取没有响应

res*_*sgh 2 c# stdin stdout stream console-application

我有一个程序,侦听控制台stdin流.

  • Read()返回时,每个字符被读出一个接一个,并传递给method().
  • method()然后将角色附加到a StringBuilder.
  • 如果是'\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();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
我刚测试,发现它与线程无关,所以把部分拿走了.我最初发布它,因为它是我的其他程序中的一个问题,这只是一个测试模型来演示它.

Xha*_*rze 5

我会改变这样的程序:

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();
}
Run Code Online (Sandbox Code Playgroud)

它更容易和有效.主要区别在于使用StreamReaderStreamWriter不是Stream.