Я бы не рекомендовал System.Timers.Timer
, поскольку он молча ест необработанные исключения и, следовательно, скрывает ошибки, которые вы должны исправить. Имхо лучше, если ваш код взрывается, если вы не обрабатываете исключения должным образом.
Что касается System.Threading.Timer
Я склонен использовать метод Change
для запуска / остановки таймера в схеме, подобной этой:
public class MyCoolService
{
Timer _timer;
public MyCoolService()
{
_timer = new Timer(MyWorkerMethod, Timeout.Infinite, Timeout.Infinite);
}
protected void OnStart()
{
_timer.Change(15000, Timeout.Infinte);
}
protected void MyWorkerMethod()
{
//pause timer during processing so it
// wont be run twice if the processing takes longer
// than the interval for some reason
_timer.Change(Timeout.Infinite, Timeout.Infinite);
try
{
DoSomeWork();
}
catch (Exception err)
{
// report the error to your manager if you dare
}
// launch again in 15 seconds
_timer.Change(15000, Timeout.Infinite);
}
}