0

次のような 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 であるという例外が呼び出されます。この動作を防ぐ方法はありますか?

4

1 に答える 1

0

システムが中断されたときに変数_updateTimerを設定する必要があります。そうしないと、再開時のコードが実行されません。null

if (_updateTimer == null) return;
// your other code
_updateTimer = null;
于 2013-09-10T06:40:24.167 に答える