0

假设您像这样创建一个 DispatchTimer:

if (_updateTimer != null) 返回;
_updateTimer = new DispatcherTimer(DispatcherPriority.Normal) {Interval = new TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)};
_updateTimer.Tick += UpdateTimerOnTick;
_updateTimer.Start();

现在您的系统进入睡眠状态或暂停工作。系统恢复工作后,代码会抛出 NullPointerException。为了避免这种情况,我注册了一个活动SystemEvents.PowerModeChanged += SystemEventsOnPowerModeChanged;

使用以下代码:

私人无效 SystemEventsOnPowerModeChanged(对象发送者,PowerModeChangedEventArgs e)
{
    如果(e.Mode == PowerModes.Suspend)
    {
        如果(_updateTimer == null)返回;
        _updateTimer.Tick -= UpdateTimerOnTick;
        _updateTimer.IsEnabled = 假;
        _updateTimer.Stop();
    }
    如果(e.Mode == PowerModes.Resume)
    {
        if (_updateTimer != null) 返回;
        _updateTimer = new DispatcherTimer(DispatcherPriority.Normal) {Interval = new TimeSpan(0, 0, 0, Settings.Default.UpdateIntervallSec)};
        _updateTimer.Tick += UpdateTimerOnTick;
        _updateTimer.Start();
    }
}

但这并不能解决问题。异常称为“UpdateTimerOnTick”方法为空。任何好主意如何防止这种行为?

4

1 回答 1

0

您应该将变量设置_updateTimernull系统暂停时,否则您的 Resume 代码未执行。

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