0

さまざまなメソッドを制御するためにいくつかのコマンドラインスイッチを使用するコンソールアプリケーションがあります。各コマンドラインスイッチは、各引数を反復処理するforループ内にあるswitchステートメントによって処理されます。

        for (int x = 0; x < args.Length; x++)
        {
            switch (args[x])
            {
             ...
            }
         }

これは私のニーズには完全に機能しますが、-set-timeoutスイッチで指定されたタイムアウト期間に基づいて、先行する引数を無期限にループさせる--loopスイッチを追加する必要があります。

私がこれまでに持っているコードは次のとおりです。

switch (args[x])
{
   case "--set-timeout-5m":
       timeout = 300000;
       System.Threading.Thread.Sleep(timeout);
       break;

       ....

    case "--loop":
        x = 0;
        break;
 }

問題は、xを設定しても、forループが引数の先頭から継続しないことです。それはただそこに座っています。

コードがforループ内にあり、Visual Studioでエラーが生成されないため、xにスコープがあることを期待しています。また、breakステートメントが大文字と小文字を区別してxをforループに渡すことも期待しています。

なぜそれが機能しないのか、またはおそらく回避策を投稿するのか誰かが説明できますか?

4

2 に答える 2

1
for (int x = 0; x < 10; x++)
{
    Console.Write(x);
    x = 0;
}

版画

0 1 1 1 1 1 1 1 1 ...

なぜならx++、各反復の後に実行されるからです。

印刷したい場合

0 0 0 0 0 0 0 0 ...

に変更する必要があります

for (int x = 0; x < 10; x++)
{
    Console.Write(x);
    x = -1;
}
于 2012-06-20T15:27:56.563 に答える
0

現在のスレッドThread.Sleepをブロックするだけです。タイムアウトを設定するには、ループの前に現在の日付を取得します。

DateTime start = DateTime.Now;

次に、反復ごとに、現在の時間がタイムアウトを超えているかどうかを確認し、超えている場合はループから抜け出します。

if(DateTime.Now.Subtract(start).TotalMilliseconds >= timeout) {
    // Stop your processin'!
}
于 2012-06-20T15:28:07.443 に答える