我正在寻找一种方法,我可以确保在我调用Stop()之后没有等待在System.Timers.Timer线程上执行回调。
基本上我有一个计时器和一个异步套接字 - 任何一个都可以在时间流逝或收到新数据包时调用适当的函数。当然,我不希望这两件事都能同时发生。
目前,我使用互斥锁保护每个功能的内部:
if (!_mutex.WaitOne(0, true))
{
return;
}
_TimeOut.Stop();
... // function body goes here
_mutex.ReleaseMutex();
在计时器内,有许多操作发生在经过的时间和被触发的事件之间,因此即使在停止计时器之后,也会在释放互斥锁后执行回调。意思是上面的代码几乎没有任何作用。
那么,是否可以确定定时器的内部运行在哪个线程上?并强制它退出回调函数,或阻塞直到该函数完成并让aboce代码处理事情?
感谢。
答案 0 :(得分:0)
在回调或事件处理程序中,您必须始终在执行任何其他操作之前检查计时器是否已实际启用。