所以这可能是一个奇怪的问题,但我有一个从控制台运行的C#程序,除了一件事以外,现在大部分工作都很好。
在我的程序中,我有一段代码,如...
loadFile();
foreach(var x in imgSet)
{
//do whatever
}
我遇到的问题是我希望我的整个程序能够自动化并使用任务调度程序运行,我不需要人工交互。程序在控制台中调用loadFile()
方法就好了,但在写出该方法的输出后,用户必须按回车进入该foreach循环。我不知道为什么会这样,并且想知道是否有办法绕过它并使其完全自动化?
答案 0 :(得分:9)
将loadFile();
方法更改为不再等待用户按Enter键,或者根据参数选择执行此操作(因此您可以将其配置为等待或不等)。
程序执行将尽可能快地从一行到另一行运行,没有延迟。如果它正在等待用户交互,那是因为该程序明确表示应该发生这种情况。
答案 1 :(得分:4)
如果是控制台计划,loadFile()
可能会拨打Console.ReadKey()
或Console.ReadLine()
如果您可以更改loadFile()
方法的代码,您可以添加一个参数或重载,以跳过用户的任何不必要的输入。
答案 2 :(得分:1)
您需要查看loadFile方法并查找等待用户输入的部分。
答案 3 :(得分:1)
loadFile方法必须做一些等待用户输入的事情。因为等待阻塞了线程,所以在该方法调用之后没有任何东西可以放入代码中,这会导致它“跳过”阻塞语句(执行指针永远不会到达该行,只要它在等待用户) 。您必须进入loadFile并查看是否可以重构它以使用户输入可选(可能取决于您在命令行中指定的参数开关)。
答案 4 :(得分:1)
为什么不简单地为您的控制台应用程序提供一个参数,这样无论何时您请求用户输入,如果提供的参数告诉您不要,请跳过该行?
示例:
protected bool _skipConsoleInput = false;
public static void Main(string[] args)
{
if(args != null && args.Count > 0 && args[0] == "SkipConsoleInputYo")
_skipConsoleInput = true;
loadFile();
GetConsoleInput();
foreach(var x in imgSet) { }
}
protected string GetConsoleInput()
{
if(_skipConsoleInput)
return string.Empty;
return Console.ReadLine();
}
如果您不提供参数,则必须按Enter键。如果你这样做,它会完全跳过它。