我正在尝试编写一些内容,以便在运行15秒后停止运行代码。
我不希望使用While
循环或任何类型的循环,并且希望使用IF-ELSE条件,因为它会使我在代码中更容易。
我希望在15秒后停止执行的代码部分是FOR循环本身。我们考虑以下代码:
for (int i = 1; i < 100000; i++)
{
Console.WriteLine("This is test no. "+ i+ "\n");
}
如何在运行15秒后停止此循环?
答案 0 :(得分:13)
您可以在具有当前日期和时间的循环之前分配DateTime变量,然后在每个循环迭代中只检查是否已经过了15秒:
DateTime start = DateTime.Now;
for (int i = 1; i < 100000; i++)
{
if ((DateTime.Now - start).TotalSeconds >= 15)
break;
Console.WriteLine("This is test no. "+ i+ "\n");
}
更新:虽然上面的内容通常会起作用,但它不是防弹的,可能会在某些边缘情况下失败(正如Servy指出in a comment),导致无限循环。更好的做法是使用Stopwatch
类,它是 System.Diagnostics 命名空间的一部分:
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 1; i < 100000; i++)
{
if (watch.Elapsed.TotalMilliseconds >= 500)
break;
Console.WriteLine("This is test no. " + i + "\n");
}
watch.Stop();
答案 1 :(得分:1)
我发布my answer from my older post,因为它在这里更相关,
我认为您需要在特定时间说“15秒”之后测量时间并停止代码,StopWatch
课程可以帮助您。
// Create new stopwatch instance
Stopwatch stopwatch = new Stopwatch();
// start stopwatch
stopwatch.Start();
// Stop the stopwatch
stopwatch.Stop();
// Write result
Console.WriteLine("Time elapsed: {0}",stopwatch.Elapsed);
// you can check for Elapsed property when its greater than 15 seconds
//then stop the code
Elapsed property returns TimeSpan实例你会做这样的事情。
TimeSpan timeGone = stopwatch.Elapsed;
为适应您的情景,您可以执行以下操作
Stopwatch stopwatch = new Stopwatch();
TimeSpan timeGone;
// Use TimeSpan constructor to specify:
// ... Days, hours, minutes, seconds, milliseconds.
// ... The TimeSpan returned has those values.
TimeSpan RequiredTimeLine = new TimeSpan(0, 0, 0, 15, 0);//set to 15 sec
While ( timeGone.Seconds < RequiredTimeLine.Seconds )
{
stopwatch.Start();
Start();
timeGone = stopwatch.Elapsed;
}
Stop();//your method which will stop listening
一些有用的链接
MSDN StopWatch
答案 2 :(得分:0)
最好能使用下面的代码,这有助于提高性能。
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));