Temporizador de parada en su método de devolución de llamada

Tengo un System.Threading.Timer que llama a su controlador de eventos apropiado (callback) cada10 ms. El método en sí esno reentrada y a veces puede tomarmucho más largo que 10 ms. Por lo tanto, quiero detener el temporizador durante la ejecución del método.

Código:

private Timer _creatorTimer;

// BackgroundWorker's work
private void CreatorWork(object sender, DoWorkEventArgs e) {
      _creatorTimer = new Timer(CreatorLoop, null, 0, 10);

      // some other code that worker is doing while the timer is active
      // ...
      // ...
}

private void CreatorLoop(object state) {
      // Stop timer (prevent reentering)
      _creatorTimer.Change(Timeout.Infinite, 0);

      /*
          ... Work here
      */

      // Reenable timer
      _creatorTimer.Change(10, 0);
} 

MSDN indica que se llama al método de devolución de llamada (cada vez que se dispara el temporizador) en un subproceso separado del grupo de subprocesos. Eso significa que si detengo el temporizador, lo primero en el método aún no evita necesariamente que el temporizador se dispare y ejecute otra instancia del método antes de que el primero tenga la oportunidad de detener el temporizador.

¿Debería tal vez el temporizador (o incluso el método no reentrante) estar bloqueado? ¿Cuál es la forma correcta de evitar que el temporizador se dispare durante la ejecución de su método de devolución de llamada (y no reentrante)?

Respuestas a la pregunta(5)

Su respuesta a la pregunta