在我的应用程序中,我确实检查了 SQL Server 上的更新(zip 文件存储在一个varbinary(max)
列中,不要问为什么这样做,它就是这样)。Timer
该应用程序每 30 分钟检查一次新版本。
现在的问题是,如果计算机进入睡眠状态并在下一个计时器周期后从中恢复,我总是会收到“无法连接到数据库......”错误。因此,我认为只需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?或者这种方法根本不是最好的主意?