Предположим, вы создали DispatchTimer следующим образом:
if (_updateTimer != null) return; _updateTimer = new DispatcherTimer(DispatcherPriority.Normal) {Interval = new TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)}; _updateTimer.Tick += UpdateTimerOnTick; _updateTimer.Start();
Теперь ваша система переходит в спящий режим или приостанавливает работу. После того, как системы возобновят работу, код выдает исключение NullPointerException. Чтобы избежать этого, я регистрируюсь на мероприятии SystemEvents.PowerModeChanged += SystemEventsOnPowerModeChanged;
Со следующим кодом:
private void SystemEventsOnPowerModeChanged(object sender, PowerModeChangedEventArgs e) { if (e.Mode == PowerModes.Suspend) { if (_updateTimer == null) return; _updateTimer.Tick -= UpdateTimerOnTick; _updateTimer.IsEnabled = false; _updateTimer.Stop(); } if (e.Mode == PowerModes.Resume) { if (_updateTimer != null) return; _updateTimer = new DispatcherTimer(DispatcherPriority.Normal) {Interval = new TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)}; _updateTimer.Tick += UpdateTimerOnTick; _updateTimer.Start(); } }
Но это не решает проблему. Исключение вызывается тем, что метод «UpdateTimerOnTick» имеет значение null. Любая хорошая идея, как предотвратить такое поведение?