Set the due time and period of the timer to infinite to stop operations temporarily.
MyTimer.Change(Timeout.Infinite, Timeout.Infinite);
To resume change it back to normal operation interval:
MyTimer.Change(this.RestartTimeout, this.OperationInterval);
It is not necessary to dispose and recreate it each time, and setting the interval to infinite will not waste and extra cpu cycles.
In this example the value this.RestartTimeout
denotes how long until the first "tick" of the timer is ran after resuming, I use 0 normally.
In my specific use, I normally switch the due time and period of the timer, then stop the timer as the first line of it's callback, do the timer work, then resume it at the end. This is to prevent reentrance on long running code.
(Timeout.Infite is -1)