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

Pin*_*Dev 3 c# console

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

Enter name:
F4-Quit
Run Code Online (Sandbox Code Playgroud)

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

如果那不可能会有什么方法呢?

谢谢!

Han*_*ant 8

只需编写自己的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);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 4

如果这是不可能的,那么解决方法是什么?

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

一般来说,如果您想要复杂的用户输入控制,UI 将比控制台更好。

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