我有这段代码:
private STOP = false;
public void Start()
{
while(!STOP)
{
//do some work
Thread.Sleep(15000);
}
}
public void Stop()
{
STOP = true;
}
但使用此代码有时需要等待15秒,如何快速停止此循环或者可能需要使用其他代码?
谢谢!
答案 0 :(得分:7)
有些事情:
private System.Threading.ManualResetEvent STOP = new System.Threading.ManualResetEvent(false);
public void Start()
{
while(true)
{
//do some work
if(STOP.WaitOne(15000))
break;
}
}
public void Stop()
{
STOP.Set();
}
答案 1 :(得分:3)
每当你发现自己写一个做某事的循环,然后等待相当长的一段时间(甚至一个秒是很长时间!)再做一次,你应该消除循环和使用计时器。例如,您的代码可以重写:
System.Threading.Timer MyTimer;
public void Start()
{
MyTimer = new Timer((s) =>
{
DoSomeWork();
}, null, 15000, 15000);
}
计时器将每15秒触发一次,以完成工作。当关闭程序时,只需丢弃计时器。
public void Stop()
{
MyTimer.Dispose();
}
这比使用花费大部分时间休眠但仍然消耗系统资源的单独线程更有效。
答案 2 :(得分:1)
使用带有超时的ManualResetEvent.WaitOne。
manualResetEvent.WaitOne(timeout)
将事件设置为唤醒,或者在超时后唤醒。
请参阅此相关question.