コンソールの標準入力ストリームをリッスンするプログラムがあります。
- 戻ると
Read()
、すべての文字が 1 つずつ読み取られ、 に渡され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();
}
}
編集:
テストしたところ、スレッドとは何の関係もないことがわかったので、その部分を取り除きました。他のプログラムの問題だったので、最初に投稿しました。これは、それを実証するためのテストモデルにすぎません。