我班上有一个Threading.Timer
。
System.Threading.Timer timer;
TimerCallback cb = new TimerCallback(ProcessTimerEvent);
timer = new Timer(cb, reset, 1000, Convert.ToInt64(this.Interval.TotalSeconds));
并为其定义了一个回调。
private void ProcessTimerEvent(object obj)
{
if(value)
MyFunction();
}
运行时,在myfunction
完成之前重新运行回调。
如何暂停Threading.Timer
以完成myfunction
?
答案 0 :(得分:15)
没有必要停止计时器,您可以让计时器继续触发回调方法,但将不可重入的代码包装在Monitor.TryEnter / Exit中。在这种情况下无需停止/重启计时器;重叠的呼叫不会获得锁定并立即返回。
object lockObject = new object();
private void ProcessTimerEvent(object state)
{
if (Monitor.TryEnter(lockObject))
{
try
{
// Work here
}
finally
{
Monitor.Exit(lockObject);
}
}
}
答案 1 :(得分:10)
您可以通过更改间隔来停用System.Threading.Timer
。您可以通过以下方式执行此操作:
timer.Change(Timeout.Infinite, Timeout.Infinite);
如果您希望计时器再次继续发射,则必须在调用myfunction
后更改时间间隔。