次のような DispatchTimer を作成するとします。
if (_updateTimer != null) リターン; _updateTimer = 新しい DispatcherTimer(DispatcherPriority.Normal) {間隔 = 新しい TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)}; _updateTimer.Tick += UpdateTimerOnTick; _updateTimer.Start();
これで、システムがスリープ状態になるか、動作が停止します。システムが作業を再開した後、コードによって NullPointerException がスローされます。これを避けるために、私はイベントに登録しますSystemEvents.PowerModeChanged += SystemEventsOnPowerModeChanged;
次のコードを使用します。
private void SystemEventsOnPowerModeChanged(オブジェクト送信者, PowerModeChangedEventArgs e) { if (e.Mode == PowerModes.Suspend) { if (_updateTimer == null) 戻ります。 _updateTimer.Tick -= UpdateTimerOnTick; _updateTimer.IsEnabled = false; _updateTimer.Stop(); } if (e.Mode == PowerModes.Resume) { if (_updateTimer != null) リターン; _updateTimer = 新しい DispatcherTimer(DispatcherPriority.Normal) {間隔 = 新しい TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)}; _updateTimer.Tick += UpdateTimerOnTick; _updateTimer.Start(); } }
しかし、これでは問題は解決しません。「UpdateTimerOnTick」メソッドが null であるという例外が呼び出されます。この動作を防ぐ方法はありますか?