我有一些循环,但我想停止5分钟后如何让循环随时间停止?
while (loop)
{
if (Name == null)
{
CheckName = false;
break;
}
else if()//want to add Stopwatch here
{
}
//if Stopwatch finished
//do something
}
我想循环,然后经过一段时间后完成循环做别的事情
我有一些循环,但我想停止5分钟后如何让循环随时间停止?
while (loop)
{
if (Name == null)
{
CheckName = false;
break;
}
else if()//want to add Stopwatch here
{
}
//if Stopwatch finished
//do something
}
我想循环,然后经过一段时间后完成循环做别的事情
的传统方式是:
Stopwatch sw = new Stopwatch();
sw.Start();
while (true)
{
if (Name == null)
{
CheckName = false;
break;
}
else if(sw.Elapsed.TotalMinutes >= 5)
{
// do something
// break;
}
}
sw.Stop();
另一种方法是:
var cancellation = new CancellationTokenSource(TimeSpan.FromMinutes(5));
....
else if(cancellation.IsCancellationRequested)
{
// do something
}
我强烈建议使用Task
在后台线程中执行此操作。运行5分钟的方法将冻结UI(如果有的话)。
请注意,使用'DateTime.Now'意味着环路可能受到DST更改的影响。使用'DateTime.UtcNow'可以避免这种情况,尽管它仍然会受到系统时钟变化的影响。我*怀疑*“秒表”不受系统时钟更改的影响。 –
感谢兄弟,这真的帮助我:) –
什么意思DST变化? –
这里是一个办法做到这一点使用System.Diagnostics.StopWatch
:
System.Diagnostics.Stopwatch sw = System.Diagnostics.Stopwatch.StartNew();
while (sw.Elapsed <= TimeSpan.FromMinutes(5))
{
if (Name == null)
{
CheckName = false;
break;
}
}
sw.Stop();
没有理由的Thread.Sleep将打破循环。没有它,你很可能会冻结你的应用程序。 –
我是新来的C#所以我还在学习:) –
你想等5分钟吗? 1-你想在其他地方等5分钟? 2-你想在其他部分启动秒表。然后继续循环(可能会再次运行else部分),那么如果计时器已经启动,您需要重新检查? 1或2.顺便说一句,2看起来很乱。你为什么这样做? – user3185569