我有一个计时器,它的回调做一些事情:
计时器:
dataProcessingTimer = new System.Threading.Timer(new TimerCallback(DataProcessingTimerHandler), null, 0, _dataProcessingTimerPollingInterval);
回调:
void DataProcessingTimerHandler(object param)
{
// some code.. (sometimes the stop function called from here).
}
当我想停止计时器时,我调用了停止函数:
public void Stop()
{
if (_dataProcessingTimer != null)
{
ManualResetEvent timerDisposeHandler = new ManualResetEvent(false);
_dataProcessingTimer.Dispose(timerDisposeHandler);
_dataProcessingTimer = null;
timerDisposeHandler.WaitOne();
}
}
在 stop 函数后面的timerDisposeHandler.WaitOne();
代码之前使用确保 dispose 完成。
但有时当在回调的中间调用停止函数时,waitone 卡住了。
似乎 WaitOne 卡住了回调,但我不明白为什么会这样,是不是在它自己的线程中找不到计时器回调?为什么stop函数的线程要卡住呢?
如果有人可以向我解释情况并给我解决方案,我会很高兴。