2011-01-01 5 views
9

Mam aplikację, która wykonuje określone zadanie po pewnym czasie (kontrolowane przez zegar). Ale zawsze, gdy uruchomię komputer po hibernacji, że aplikacja działa. Oznacza to, że czasomierz działa podczas hibernacji przynajmniej przez jeden tyk. Jak mogę tego uniknąć.Jak zatrzymać timer podczas hibernacji/trybu uśpienia w aplikacji C# winform?

+0

Wystarczy, aby uzyskać to prawo, timer jest w (C#?) Aplikacji, którą napisałem. Rozpoczynasz aplikację, która uruchamia timer. Następnie umieść komputer (zakładając system operacyjny Windows) w stan uśpienia/hibernacji. Po upływie czasu dłuższego niż licznik czasu uruchom ponownie komputer i wystąpi zdarzenie dotyku aplikacji. Teraz chcesz wiedzieć, jak zapobiec odliczaniu czasu, gdy komputer jest w stanie hibernacji. Poprawny? – froeschli

+0

@froeschli dokładnie –

+0

Przykro mi to rozczarować, ale nie mogę dać ci odpowiedzi na twoje pytanie. – froeschli

Odpowiedz

17

Można obsłużyć zdarzenie SystemEvents.PowerModeChanged, aby zatrzymać licznik czasu, gdy urządzenie zawiesza się i uruchomić go ponownie po wznowieniu.

SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged; 

...

void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) 
    { 
     if (e.Mode == PowerModes.Suspend) PauseTimer(); 
     else if (e.Mode == PowerModes.Resume) ResumeTimer(); 
    } 
+0

co jest celem SystemEvents.PowerModeChanged + = SystemEvents_PowerModeChanged; –

+1

To jest przypisanie do zdarzenia/zadania. Za każdym razem, gdy zostanie wywołane zdarzenie 'SystemEvents.PowerModeChanged', zostanie wywołana metoda' SystemEvents_PowerModeChanged', z trybem w parametrze 'e', który jest przekazywany do funkcji. Nie zweryfikowałem tego, ale wydaje się prawdopodobne rozwiązanie. – froeschli

+2

Jedna ważna rzecz do zapamiętania ze strony [MSDN] (http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.powermodechanged%28v=VS.90%29.aspx) dla ' Zdarzenie SystemEvents.PowerModeChanged' polega na tym, że musisz odłączyć obsługę zdarzeń, gdy aplikacja zostanie usunięta: 'SystemEvents.PowerModeChanged - = SystemEvents_PowerModeChanged;'. –