按下某个键时,如何中断(不使用线程)console.readline?

让我解释一下,这就是我想要实现的目标:

Enter name: F4-Quit 

有没有一种方法可以显示下一行(F4-Quit)而没有readline在显示之前等待用户输入? 原因是我想,在任何时候退出,即使名称尚未输入(光标在等待),这在许多情况下非常有用,在这种情况下,有人在输入信息的过程中改变了主意并想要退出或返回。

如果这不可能会是什么方式呢?

谢谢!

只需编写自己的ReadLine()版本。 这是.NET的TryParse()模式中的TryReadLine()版本:

  static bool TryReadLine(out string result) { var buf = new StringBuilder(); for (; ; ) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.F4) { result = ""; return false; } else if (key.Key == ConsoleKey.Enter) { result = buf.ToString(); return true; } else if (key.Key == ConsoleKey.Backspace && buf.Length > 0) { buf.Remove(buf.Length - 1, 1); Console.Write("\b \b"); } else if (key.KeyChar != 0) { buf.Append(key.KeyChar); Console.Write(key.KeyChar); } } } 

如果这不可能会是什么方式呢?

解决这个问题的最佳方法是使用GUI应用程序。 这将消除控制台对您的限制。

通常,如果您想要复杂的用户输入控件,UI将比控制台更好。

如果必须使用控制台应用程序,则可能需要在循环中使用Console.ReadKey而不是Console.ReadLine ,并检查“escape”键击。 输入新行字符后,您可以处理“文本”命令/输入/等。

这是Jeppe指出的解决方案

  public static void Main() { ConsoleKeyInfo cki; Console.Clear(); // Establish an event handler to process key press events. Console.CancelKeyPress += new ConsoleCancelEventHandler(myHandler); while (true) { Console.Write("Press any key, or 'X' to quit, or "); Console.WriteLine("CTRL+C to interrupt the read operation:"); // Start a console read operation. Do not display the input. cki = Console.ReadKey(true); // this process can be skipped // Console.WriteLine(" Key pressed: {0}\n", cki.Key); // Exit if the user pressed the 'X' key. if (cki.Key == ConsoleKey.F4) break; } } protected static void myHandler(object sender, ConsoleCancelEventArgs args) { args.Cancel = true; go_back_to_main(); } 

如果它不必是F4键,但您可以使用Ctrl + C或Ctrl + Break,那么您可以使用CancelKeyPress事件 。