C#定时器/事件竞赛 - 刷新定时器线程

时间:2009-09-22 08:17:02

标签: c# multithreading

我正在寻找一种方法,我可以确保在我调用Stop()之后没有等待在System.Timers.Timer线程上执行回调。

基本上我有一个计时器和一个异步套接字 - 任何一个都可以在时间流逝或收到新数据包时调用适当的函数。当然,我不希望这两件事都能同时发生。

目前,我使用互斥锁保护每个功能的内部:

if (!_mutex.WaitOne(0, true))
{
   return;
}
_TimeOut.Stop();
... // function body goes here
_mutex.ReleaseMutex();

在计时器内,有许多操作发生在经过的时间和被触发的事件之间,因此即使在停止计时器之后,也会在释放互斥锁后执行回调。意思是上面的代码几乎没有任何作用。

那么,是否可以确定定时器的内部运行在哪个线程上?并强制它退出回调函数,或阻塞直到该函数完成并让aboce代码处理事情?

感谢。

1 个答案:

答案 0 :(得分:0)

在回调或事件处理程序中,您必须始终在执行任何其他操作之前检查计时器是否已实际启用。