c#在不停止应用的情况下读取用户输入

我知道我可以使用ReadKey,但它会冻结应用程序,直到用户按下一个键。 是否有可能(在控制台应用程序中)运行一些循环仍然能够做出反应? 我只能想到事件,但不知道如何在控制台中使用它们。 我的想法是循环将在每次迭代期间检查输入。

我为自己的应用程序完成此操作的方式是让一个专用线程调用System.Console.ReadKey(true)并将按键(和任何其他事件)放入消息队列。

然后,主线程在循环中(以类似于Win32应用程序中的主循环的方式)为此队列提供服务,确保在单个线程上处理渲染和事件处理。

 private void StartKeyboardListener() { var thread = new Thread(() => { while (!this.stopping) { ConsoleKeyInfo key = System.Console.ReadKey(true); this.messageQueue.Enqueue(new KeyboardMessage(key)); } }); thread.IsBackground = true; thread.Start(); } private void MessageLoop() { while (!this.stopping) { Message message = this.messageQueue.Dequeue(DEQUEUE_TIMEOUT); if (message != null) { switch (message.MessageType) { case MessageType.Keyboard: HandleKeyboardMessage((KeyboardMessage) message); break; ... } } Thread.Yield(); // or Thread.Sleep(0) } } 

让循环在单独的线程中运行。

 class Program { private static string input; public static void Main() { Thread t = new Thread(new ThreadStart(work)); input = Console.ReadLine(); } private static void work() { while (input == null) { //do stuff.... } } }