ich mein Projekt baue mit dem „Microsoft Minimal-Regeln“ Code-Analyse-Set und es gibt mir CA2000 auf dieser Methode:Warum verursacht diese Methode Code-Analyse Fehler CA2000: Rufen Sie Dispose()
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;
}
Diese Methode erstellt nur eine neue System.Timers.Timer
aus einem Intervall in Sekunden. Ich habe drei solche Timer laufen (eine für jede Sekunde, eine jede Minute und jede halbe Stunde). Vielleicht ist es besser, einen Timer zu haben und den Event-Handler zu überprüfen, ob eine Minute oder eine halbe Stunde vergangen ist, aber ich weiß nicht, das ist zu diesem Zeitpunkt einfacher, es ist Code geerbt und ich möchte nicht alles kaputt machen noch.
Diese Methode gibt mir das berüchtigte
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.
Jetzt bin ich Entsorgen im Fang Aufruf und dachte, dass dies ausreicht? Ich verfüge auch über alle Timer in der eigenen IDisposable-Implementierung der Klasse.
Was fehlt mir hier?
die Objektinitialisierer Syntax herausnehmen - das ist, was die Warnung der Auslösung (da das Objekt vorhanden ist, gebaut, aber "timer" wird nicht zugewiesen, während der Initialisierer läuft. Ich versuche, die Dupefrage zu finden, die sich damit beschäftigt. –
mögliches Duplikat von [Objektinitialisierer in using-block generiert Codeanalysewarnung CA2000] (http://stackoverflow.com/questions/3514902/object-initializers-in-using-block-generiert-code-analysis-warning-ca2000) –
Nun, werfen Sie nicht die Initialisierersyntax für ein dummes Tool weg.Die Warnung ist gefälscht, da ist nichts zu entsorgen, bis Start() aufgerufen wird. Verschlucken von Ausnahmen und Zurückgeben eines entsorgten Objekts, jetzt * das * wäre etwas, über das man sich beschweren könnte. –