Comment bloquer une minuterie pendant le traitement de l'événement écoulé?

J'ai un timer qui ne doit pas traiter ses écoulé gestionnaire d'événements en même temps. Mais le traitement d'un événement Écoulé peut interférer avec les autres. J'ai mis en place ci-dessous la solution, mais quelque chose se sent mal; il semble que ce soit, je devrait être à l'aide de la minuterie de manière différente ou en utilisant un autre objet dans le filetage de l'espace. La minuterie semblait convenir le mieux, car j'ai besoin de vérifier périodiquement un état, mais parfois, la vérification de prendre plus de temps que mes intervalle. Est-ce la meilleure façon d'aborder cette question?

//member variable
private static readonly object timerLock = new object();
private bool found = false;


//elsewhere
timer.Interval = TimeSpan.FromSeconds(5).TotalMilliseconds;
timer.Elapsed = Timer_OnElapsed;
timer.Start();


public void Timer_OnElapsed(object sender, ElapsedEventArgs e)
{
  lock(timerLock)
  {
    if (!found)
    {
      found = LookForItWhichMightTakeALongTime();
    }
  }
}

source d'informationauteur