等待特定键退出而不中断其他代码

时间:2017-03-18 19:08:07

标签: c# console

[这不是重复,因为我的问题不同;我不想关闭我的计划而且我不想在主代码中使用Console.ReadKey()!]

如果用户按下例如,我想退出程序的当前菜单(不要结束!) "逃生"但我不想在代码正文中使用Console.ReadKey

我先告诉你我的代码:

while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape))
{
string input = Console.ReadLine();
// if(input == // ... and so on
// rest of code
}

这就是我的想法。但问题是,由于ReadLine,按下Escape不会让我退出while循环。我想离开循环WHENEVER我按下一个特定的键。可能在Console.ReadLine()处于活跃状态或其他状态时,它并不重要。

有一种简单的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以编写自己的 ReadLine

如果按下ESC,此代码将返回null,否则用户输入字符串..

static string ReadLine()
{
    StringBuilder sb = new StringBuilder();
    while(true)
    {
        var keyInfo = Console.ReadKey(true);

        if (keyInfo.Key == ConsoleKey.Escape) return null;
        if (keyInfo.Key == ConsoleKey.Enter)
        {
            Console.WriteLine();
            return sb.ToString();
        }
        if (keyInfo.Key == ConsoleKey.Backspace && sb.Length > 0)
        {
            Console.Write(keyInfo.KeyChar + " " + keyInfo.KeyChar);
            sb.Length--;
            continue;
        }
        if (Char.IsControl(keyInfo.KeyChar)) continue;

        Console.Write(keyInfo.KeyChar);
        sb.Append(keyInfo.KeyChar);
    }
}