可能重复:
同步计时器以防止重叠
Threading.Timer我班上有一个.
System.Threading.Timer timer;
TimerCallback cb = new TimerCallback(ProcessTimerEvent);
timer = new Timer(cb, reset, 1000, Convert.ToInt64(this.Interval.TotalSeconds));
Run Code Online (Sandbox Code Playgroud)
并为它定义了一个回调.
private void ProcessTimerEvent(object obj)
{
if(value)
MyFunction();
}
Run Code Online (Sandbox Code Playgroud)
运行它时,在myfunction完成之前重新运行回调.
如何暂停Threading.Timer完成myfunction?
Iva*_*nko 16
没有必要停止计时器,您可以让计时器继续触发回调方法,但将不可重入的代码包装在Monitor.TryEnter/Exit中.在这种情况下无需停止/重启计时器; 重叠调用不会获得锁定并立即返回.
object lockObject = new object();
private void ProcessTimerEvent(object state)
{
if (Monitor.TryEnter(lockObject))
{
try
{
// Work here
}
finally
{
Monitor.Exit(lockObject);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Adr*_*ips 10
您可以System.Threading.Timer通过更改间隔来禁用a .你可以通过调用:
timer.Change(Timeout.Infinite, Timeout.Infinite);
Run Code Online (Sandbox Code Playgroud)
myfunction如果您希望计时器再次继续触发,则必须在完成呼叫后更改间隔.