0

所以这可能是一个奇怪的问题,但我有一个从控制台运行的 C# 程序,现在大部分情况下一切正常,除了一件事。

在我的程序中,我有一段代码,例如...

loadFile();

foreach(var x in imgSet)
{
  //do whatever
}

我遇到的问题是我希望我的整个程序自动化并使用任务调度程序运行,我不希望人工交互。并且程序在控制台中调用该loadFile()方法很好,但是在它写出该方法的输出之后,用户必须按 enter 进入该 foreach 循环。我不太清楚为什么会这样,并且想知道是否有办法绕过它并使其完全自动化?

4

5 回答 5

9

将方法更改为loadFile();不再等待用户按 Enter,或者根据参数选择执行此操作(因此您可以将其配置为等待或不等待)。

程序执行将尽可能快地逐行运行,没有延迟。如果它正在等待用户交互,那是因为程序明确表示应该发生这种情况。

于 2011-08-09T21:24:50.133 回答
4

如果是控制台程序,loadFile()可以调用Console.ReadKey()Console.ReadLine()

如果您可以更改该loadFile()方法的代码,您也许可以添加一个参数或一个重载,从而跳过用户的任何不必要的输入。

于 2011-08-09T21:25:29.250 回答
1

您需要查看 loadFile 方法的内部并找到它等待用户输入的部分。

于 2011-08-09T21:25:35.250 回答
1

loadFile 方法必须做一些等待用户输入的事情。因为该等待正在阻塞线程,所以在该方法调用之后您不能将任何内容放入代码中,这会导致它“跳过”阻塞语句(只要它在等待用户,执行指针就永远不会到达该行) . 您必须进入 loadFile 并查看是否可以重构它以使用户输入可选(可能取决于您在命令行上指定的参数开关)。

于 2011-08-09T21:26:25.187 回答
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();
}

当您不提供参数时,您必须按回车键。如果你这样做,它会完全跳过它。

于 2011-08-09T21:26:56.633 回答