2016-09-14 101 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();