Маловероятно, что код размещен как бомбы на ObjectDisposed. Тем не менее, получение исключения не удивительно, когда вы используете System.Timers.Timer. У вас есть , чтобы убедиться, что таймер выключен до закрытия формы. Невыполнение этого условия позволяет запускать событие Elapsed, когда объект формы мертв.
Большая проблема в том, что практически невозможно гарантировать, что таймер действительно остановлен. Существует неизбежное состояние гонки, событие Elapsed, возможно, уже запланировано для запуска, пока вы останавливаете таймер. Есть разные, неприятные вещи, которые вы можете сделать с этим. Но прежде чем идти туда, убедитесь, что System.Windows.Forms.Timer не решит вашу проблему. Это синхронный таймер, он никогда не будет отмечаться после закрытия формы. Это также позволяет избежать неприятных проблем с потоками, с которыми вы можете столкнуться при доступе к членам класса в событии Elapsed без использования оператора блокировки.