我正在使用“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 实现中处理所有计时器。
我在这里想念什么?