0

したがって、これは奇妙な質問かもしれませんが、コンソールから実行されるC#プログラムがあり、1つを除いて、ほとんどすべてが正常に機能しています。

私のプログラム内には、次のようなコードのセクションがあります...

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();
}

引数を指定しない場合は、Enterキーを押す必要があります。そうした場合、それは完全にスキップされます。

于 2011-08-09T21:26:56.633 に答える