C#:为什么用户必须在Console.Readline()开始阅读之前按Enter键?

Tar*_*ara 8 c# console-application

我的程序可以使用GUI或命令行运行.当它从命令行运行时,我会在程序启动后请求更多命令(使用Console.Readline()).但是,在按Enter键之前,它不会接受用户的任何输入(在输入之前).

我将项目作为控制台项目启动,如下所示:

[DllImport("kernel32.dll")]
private static extern bool AllocConsole();

[DllImport("kernel32.dll")]
private static extern bool AttachConsole(int pid);

private static void Main(string[] args)
{
    if (args.Length > 0 && args[0] == "noGUI")
    {
        if (!AttachConsole(-1))
        {
            AllocConsole();
        }
    ...

        List<string> newInput;
        do
        {
            Console.WriteLine();
            Console.Write(@"Enter additional commands: ");
            string inputStr = Console.ReadLine();

            newInput = GetArgs(inputStr);

            if (newInput.Count == 0)
            {
                Console.WriteLine();
                Console.WriteLine(@"Please enter a valid command");
                continue;
            }
            ...
        } while(true)
    }
...
Run Code Online (Sandbox Code Playgroud)

当用户输入"/ Exit"时(例如)输出以下内容:

输入其他命令: /退出

'/ Exit'不被识别为内部或外部命令,可操作程序或批处理文件.

但是,如果用户首先按Enter键(在"输入附加命令:"之后),则可以输入程序命令.

有没有想过为什么他们必须先按进入?用户在输入之前按下它是不直观的,所以我想改变它.

谢谢!

Han*_*ant 14

问题是您连接到命令行处理器的控制台cmd.exe.现在有两个对输入感兴趣的程序.Cmd.exe获胜,它不知道/ Exit命令应该是什么意思.并显示您看到的错误消息.首先按Enter键没问题,cmd.exe不介意.而你的程序转了一圈.

创建自己的控制台,始终调用AllocConsole().