2013-10-28 82 views
1

在我的應用程序中,我檢查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走錯了路?或者這種方法不是最好的主意?

+0

它是從服務或常規應用程序運行嗎? (我想這是一個普通的應用程序,從WPF標籤,但只是想確定) –

+0

爲什麼不測試連接狀態,並連接,如果它沒有連接? – Paparazzi

+0

這是一個普通的應用程序。由於無法在待機模式下連接,因此如果在正常情況下無法檢查更新,我還想顯示錯誤消息。 – Staeff

回答

0

你可以使用try catch,並在發生錯誤時捕獲異常。當計算機休眠時,它會拋出異常,並且你的程序將捕獲該異常。程序不會停止,並且會一次又一次地循環。當電腦恢復時,它將像平常一樣開始工作。

+0

但是,通過這種方式,當PC未處於待機狀態時,我不會在更新時發生例外情況。我想向用戶顯示其他連接問題。它只是說,這也是每次用戶從待機狀態中醒來時。 – Staeff

相關問題