当PC进入休眠状态时,停止计时器以进行更新检查

时间:2013-10-28 13:11:44

标签: c# .net wpf

在我的应用程序中,我检查SQL Server上的更新(zip文件存储在varbinary(max)列中,不要问为什么这样做,就像它一样)。该应用程序正在检查每30分钟Timer的新版本。

现在的问题是,如果计算机进入休眠状态并在下一个计时器周期后从中恢复,我总是会收到“无法连接到数据库...”错误。所以我觉得只要在系统进入待机状态时停止Timer并在唤醒时恢复它就足够了。

但似乎我从未进入PowerModeChanged事件(我试图检查写日志,因为我认为你不能真正调试这个事件。)

下面的代码显示了我正在尝试做的事情,并且来自我的App.xaml.cs

// System.Threading.Timer not System.Timers
private Timer _updateTimer;

private void App_OnStartup(object sender, StartupEventArgs e)
{
    // Do update check on startup
    ...

    var updateTime = new TimeSpan(0, 30, 0); // 30 Minutes

    // start update checking in 30 minutes and do it every 30 minutes
    _updateTimer = new Timer(UpdateCheck, null, updateTime, updateTime);

    SystemEvents.PowerModeChanged += (o, args) =>
        {
            if (args.Mode == PowerModes.Suspend)
                _updateTimer.Dispose();
            else if (args.Mode == PowerModes.Resume)
                _updateTimer = new Timer( ... );
        };
}

private void UpdateCheck(object state)
{
    if (Settings.Default.AutoUpdate && UpdateAvailable()) {
        if (MessageBox.Show( ... ) == MessageBoxResult.Yes)
            DoUpdate();
    }
}

private bool UpdateAvailable() { ... }
private void DoUpdate() { ... }

我是以错误的方式使用PowerModeChanged吗?或者这种方法根本不是最好的想法?

1 个答案:

答案 0 :(得分:0)

你可以使用try catch并捕获它给出错误的异常。当计算机休眠时它将抛出异常,你的程序将捕获它。程序不会停止并将一次又一次循环。当计算机恢复时,它将开始正常工作。