如何使args进入无限循环?

时间:2012-06-20 15:21:27

标签: c#

我有一个控制台应用程序,它使用许多命令行开关来控制各种方法。每个命令行开关都由switch语句处理,该语句位于遍历每个args的for循环中。

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

这完全符合我的需要,但是我需要添加一个--loop开关,它会根据--set-timeout开关指定的超时时间无限期地循环前面的args。

我到目前为止的代码是:

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

       ....

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

问题是设置x不会导致for循环从args的开始继续。它只是坐在那里。

我希望x具有范围,因为代码在for循环中,并且在Visual Studio中不会生成错误。我也期望break语句打破这种情况并将x传递给for循环。

任何人都可以解释为什么它不起作用或者可能会发布变通方法?

2 个答案:

答案 0 :(得分: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 0 ...

您需要将其更改为

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

答案 1 :(得分:0)

您的Thread.Sleep将阻止当前线程。要设置超时,请在循环之前获取当前日期:

DateTime start = DateTime.Now;

然后,在每次迭代时,检查当前时间是否已超过超时,如果有,则跳出循环:

if(DateTime.Now.Subtract(start).TotalMilliseconds >= timeout) {
    // Stop your processin'!
}