如何在 Console.ReadLine 期间避免在 Ctrl-C 之后出现 Console.Write?

How to avoid Console.Write after Ctrl-C during Console.ReadLine?

我有一个小型 .NET 控制台程序,它要求 SQL 凭据(登录名、密码)。问题是,如果我在登录提示(下面的 string userId = Console.ReadLine();)期间键入 Ctrl-C,程序会停止,但 "password:" 提示会写入控制台。相关片段:

Console.Write("login: ");
string userId = Console.ReadLine();
    
Console.Write("password: ");

登录提示期间按 Ctrl-C 的输出:

login: password:

如何避免在使用 Ctrl-C 退出后执行后续的 Console.Write("password: ");

更新 1: CancelKeyPress 事件处理程序没有帮助。至少对我来说,它适用于 Console.ReadKey,但不适用于 Console.ReadLine:密码提示仍然写着。

UPDATE 2:如果空检查块后有Write/WriteLine,它仍然在我的机器上执行(Win10,VS2019)。所以,其实问题还是存在的。当前解决方法 - ReadKey。

正如 AgentFire 提到的添加输入验证。

    class Program
    {
        static void Main()
        {
            Console.Write("login: ");
            string userId = Console.ReadLine();

            if (string.IsNullOrWhiteSpace(userId))
            {
                Environment.Exit(-1);
            }
            Console.Write("password: ");
            ....
        }

    }

如果您的代码在您按下 Ctrl-C 后确实继续 运行(由于某种原因它不在我的机器上),我敢打赌十你的 userId 变量将是 null,而不是通常的空字符串(如果你什么都不输入并按 Enter)。

因此,只需检查 null