Почему этот метод вызывает ошибку анализа кода CA2000: вызов Dispose()

Я создаю свой проект с набором анализа кода "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.

Что я здесь упустил?

7
задан Davio 22 May 2012 в 07:22
поделиться