假设您像这样创建一个 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”方法为空。任何好主意如何防止这种行为?