我有一个控制台应用程序,它使用许多命令行开关来控制各种方法。每个命令行开关都由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循环。
任何人都可以解释为什么它不起作用或者可能会发布变通方法?
答案 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'!
}