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

时间:2011-03-25 22:10:42

标签: 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)
    }
...

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

  

输入其他命令: /退出

     

'/ Exit'无法识别为内部或外部命令,可操作   程序或批处理文件。

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

为什么他们必须先按Enter键?用户在输入之前按下它是不直观的,所以我想改变它。

谢谢!

2 个答案:

答案 0 :(得分:14)

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

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

答案 1 :(得分:0)

因为[Enter]表示该行的结尾!

如果您不喜欢,请改用Console.ReadKey()Console.Read()