「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
、秒単位の間隔から新しいものを作成するだけです。このようなタイマーを 3 つ実行しています (1 秒ごと、1 分ごと、30 分ごと)。タイマーを 1 つ用意して、経過イベント ハンドラーで 1 分または 30 分が経過したかどうかを確認する方がよいかもしれませんが、現時点ではこれの方が簡単です。継承されたコードであり、すべてを壊したくありません。まだ。
この方法は私に悪名高い
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 実装ですべてのタイマーを破棄しています。
ここで何が欠けていますか?