0

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

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

这非常适合我的需要,但是我需要添加一个 --loop 开关,它会根据 --set-timeout 开关指定的超时时间来无限期地循环前面的参数。

我到目前为止的代码是:

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 循环。

谁能解释为什么它不起作用或发布解决方法?

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 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 回答