在我的應用程序中,我檢查SQL Server上的更新(zip文件存儲在varbinary(max)
列中,不要問爲什麼這樣做,它只是它的方式)。應用程序正在每30分鐘檢查一個Timer
的新版本。當PC進入休眠狀態時停止計時器進行更新檢查
現在的問題是,如果計算機進入休眠狀態,並在下一個計時器週期後恢復,我總是收到「無法連接到數據庫...」錯誤。所以我認爲當系統進入待機狀態時只需停止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走錯了路?或者這種方法不是最好的主意?
它是從服務或常規應用程序運行嗎? (我想這是一個普通的應用程序,從WPF標籤,但只是想確定) –
爲什麼不測試連接狀態,並連接,如果它沒有連接? – Paparazzi
這是一個普通的應用程序。由於無法在待機模式下連接,因此如果在正常情況下無法檢查更新,我還想顯示錯誤消息。 – Staeff