我有一個程序,監聽控制檯stdin流。c#stdin讀取沒有響應
- 當
Read()
返回時,每個字符被逐一讀出並傳遞到method()
。 method()
然後將字符附加到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();
}
}
編輯:
我只是測試,並發現它有什麼做的線程,因此採取了部分路程。我最初發布它是因爲它在我的其他程序中是一個問題,這只是一個演示它的測試模型。
是否有意讓您的Main方法結束? –
請將文字,大寫字母和空格添加到您的文本中,以便我可以解讀它。 – Jodrell
@HenkHolterman確實打敗了多線程的觀點。 – Jodrell