Я создаю свой проект с набором анализа кода "Microsoft Minimal Rules", и он дает мне CA2000 по этому методу:
private Timer InitializeTimer(double intervalInSeconds)
{
Timer timer = null;
try
{
timer = new Timer { Interval = intervalInSeconds * 1000, Enabled = true };
timer.Elapsed += timer_Elapsed;
timer.Start();
}
catch
{
if (timer != null)
{
timer.Dispose();
}
}
return timer;
}
Этот метод просто создает новый System.Timers.Timer
] из интервала в секундах. У меня работает три таких таймера (по одному на каждую секунду, один на каждую минуту и один на полчаса). Может быть, лучше иметь один таймер и проверять в обработчике истекших событий, прошла ли минута или полчаса, но я не знаю, это проще на данный момент, это унаследованный код, и я не хочу все ломать пока что.
Этот метод дает мне пресловутый
Warning 21 CA2000 : Microsoft.Reliability : In method 'TimerManager.InitializeTimer(double)', call System.IDisposable.Dispose on object '<>g__initLocal0' before all references to it are out of scope.
Теперь я вызываю Dispose в улове и думаю, что этого будет достаточно? Я также размещаю все таймеры в собственной реализации класса IDisposable.
Что я здесь упустил?