콘솔 stdin 스트림을 수신하는 프로그램이 있습니다.C# stdin read not responding
- 는
Read()
반환, 모든 문자 하나 하나를 읽고method()
에 전달됩니다. method()
다음 문자를StringBuilder
에 추가합니다.- 문자가
'\n'
인 경우method()
은respond()
을 호출하여 읽은 문자를 인쇄하고StringBuilder
을 지 웁니다.
그러나 콘솔에 무엇인가를 입력하고 Enter 키를 누른 후에도 내 마우스, 마우스 단추 또는 콘솔의 포커스 내에있는 키보드를 눌러서 입력 할 텍스트를 입력해야합니다. 더욱 신비한 점은 중괄호 첫 번째 중괄호에 중단 점을 설정하고 그 후에 모든 단일 명령문으로 들어가면 프로그램이 올바르게 실행된다는 것입니다. 이 문제를 어떻게 해결할 수 있습니까? 고마워요!
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