我的程序可以使用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键?用户在输入之前按下它是不直观的,所以我想改变它。
谢谢!
答案 0 :(得分:14)
问题是您已连接到命令行处理器cmd.exe的控制台。现在有两个程序对输入感兴趣。 Cmd.exe获胜,它不知道/ Exit命令应该是什么意思。并显示您看到的错误消息。首先按Enter键没问题,cmd.exe不介意。你的程序转了。
创建自己的控制台,始终调用AllocConsole()。
答案 1 :(得分:0)
因为[Enter]表示该行的结尾!
如果您不喜欢,请改用Console.ReadKey()
或Console.Read()
。