Ваш финализатор, вероятно, неисправен.Он правильно передает false
в качестве параметра Disposing
.Это должно сказать Dispose(bool)
, чтобы не пытаться утилизировать другие управляемые объекты.Но в этом методе вы вводите:
if (Disposing)
{
}
if (myTimer != null)
{
myTimer.Dispose();
}
Таким образом, вы игнорируете значение Disposing
.Это означает, что вы вызываете метод таймера Dispose
из потока финализатора, когда этот объект, возможно, уже был завершен (если у него есть финализатор, что он, вероятно, делает).Финализаторы работают в непредсказуемом порядке.Обычно рекомендуется не выполнять вызовы для других объектов, управляемых GC, из финализатора.
Фактически, обычно рекомендуется не писать финализаторы вообще в эти дни.Вопрос не просил вас написать один!К сожалению, большинство уроков по IDisposable
также говорят о финализаторах.Это разные предметы.
Вы также ловите Exception
, базовый класс универсальных исключений.Это означает, что вы ловите такие вещи, как NullReferenceException
.Обычно это не очень хорошая идея.Вы также входите в консоль, которая не имеет большого значения в графическом интерфейсе или серверном приложении.
Вы можете заменить:
myTimer.Elapsed += new ElapsedEventHandler(OneSecondElapsed);
на:
myTimer.Elapsed += OneSecondElapsed;
Ваше имя переменной не соответствует.См. рекомендации Microsoft .