我有一些循環,但我想停止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