Timer wird in seiner Callback-Methode gestoppt

Ich habe einen System.Threading.Timer, der jeden seinen entsprechenden Ereignishandler (Rückruf) aufruft10 ms. Die Methode selbst istnicht wiedereintreten und kann manchmal dauernviel länger als 10 ms. Daher möchte ich den Timer während der Methodenausführung anhalten.

Code:

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 gibt an, dass die Rückrufmethode (jedes Mal, wenn der Zeitgeber ausgelöst wird) in separatem Thread aus dem Threadpool aufgerufen wird. Das bedeutet, dass, wenn ich den Timer als erstes stoppe, er immer noch nicht notwendigerweise den Timer daran hindert, eine andere Instanz der Methode auszulösen und auszuführen, bevor der erste die Chance hatte, den Timer zu stoppen.

Sollte vielleicht der Timer (oder sogar die nicht wiedereintrittsfähige Methode selbst) gesperrt sein? Was ist der richtige Weg, um zu verhindern, dass der Timer während der Ausführung seiner Callback- (und nicht wiedereintrittsfähigen) Methode ausgelöst wird?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage