2014-04-06 2 views
0

현재 멀티 스레딩을 많이 사용하는 콘솔 응용 프로그램을 작성 중입니다. 나는 항상 사용자가 콘솔에 무언가를 입력 할 수 있도록하고 싶지만 스레드로부터 콘솔에 정기적 인 출력이있을 것이지만 사용자가 항상 콘솔에 물건을 입력하고 입력을 처리 할 수있게하고 싶다. .C# Console Application - 콘솔에서 항상 입력을 읽으려면 어떻게해야합니까?

어떻게하면 좋을까요? 그것에 대해 온라인으로 아무것도 찾지 못했습니까?

고맙습니다.

이것은 C# btw 용입니다!

답변

1
class Program 
{ 
    static void Main(string[] args) 
    { 
    // cancellation by keyboard string 
    CancellationTokenSource cts = new CancellationTokenSource(); 

    // thread that listens for keyboard input 
    var kbTask = Task.Run(() => 
    { 
     while(true) 
     { 
     string userInput = Console.ReadLine(); 
     if(userInput == "c") 
     { 
      cts.Cancel(); 
      break; 
     } 
     else 
     { 
      // handle input 
      Console.WriteLine("Executing user command {0}...", userInput); 
     } 
     } 
    }); 

    // thread that performs main work 
    Task.Run(() => DoWork(), cts.Token); 

    Console.WriteLine("Type commands followed by 'ENTER'"); 
    Console.WriteLine("Enter 'C' to end program."); 
    Console.WriteLine(); 

    // keep Console running until cancellation token is invoked 
    kbTask.Wait(); 
    } 

    static void DoWork() 
    { 
    while(true) 
    { 
     Thread.Sleep(3000); 
     Console.WriteLine("Doing work..."); 
    } 
    } 
} 
+0

아니요 작동하지 않습니다 ... 콘솔에 무엇인가를 입력하면 종료됩니다. – user3228693

+0

당신은 정확합니다 ... 지금 바로 ... – mdisibio

+0

@ user3228693 사용자 입력에 의해서만 스레드를 취소하는 모델을 기반으로 한 첫 번째 게시물에 사과드립니다. 여러 명령을 입력하려면 리스너 스레드를 루프에서 실행해야합니다. 또한 샘플을 실행하고 개념을 설명 할 수 있도록 더미 작업자 스레드를 추가했습니다. – mdisibio

관련 문제