2016-09-14 97 views
-3

我有一些循环,但我想停止5分钟后如何让循环随时间停止?

while (loop) 
{ 
if (Name == null) 
{ 
    CheckName = false; 
    break; 
} 
else if()//want to add Stopwatch here 
{ 
} 
//if Stopwatch finished 
//do something 
} 

我想循环,然后经过一段时间后完成循环做别的事情

+0

没有理由的Thread.Sleep将打破循环。没有它,你很可能会冻结你的应用程序。 –

+0

我是新来的C#所以我还在学习:) –

+0

你想等5分钟吗? 1-你想在其他地方等5分钟? 2-你想在其他部分启动秒表。然后继续循环(可能会再次运行else部分),那么如果计时器已经启动,您需要重新检查? 1或2.顺便说一句,2看起来很乱。你为什么这样做? – user3185569

回答

5

的传统方式是:

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(如果有的话)。

+2

请注意,使用'DateTime.Now'意味着环路可能受到DST更改的影响。使用'DateTime.UtcNow'可以避免这种情况,尽管它仍然会受到系统时钟变化的影响。我*怀疑*“秒表”不受系统时钟更改的影响。 –

+0

感谢兄弟,这真的帮助我:) –

+0

什么意思DST变化? –

2

这里是一个办法做到这一点使用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();