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().