2011-01-01 7 views
9

Ich habe eine Anwendung, die nach einiger Zeit eine bestimmte Aufgabe erledigt (gesteuert von einem Timer). Aber wenn ich PC nach dem Winterschlaf starte, läuft diese Anwendung. Dies bedeutet, dass der Timer für mindestens einen Tick im Ruhezustand läuft. Wie kann ich das vermeiden?Wie kann man einen Timer während des Ruhezustands/Schlafmodus in C# Winform Anwendung stoppen?

+0

Genau dieses Recht zu bekommen, wird der Timer in der (C#?) Anwendung, die Sie geschrieben haben. Sie starten Ihre Anwendung, die den Timer startet. Sie setzen dann Ihren PC (vorausgesetzt Windows os) in den Ruhezustand/Ruhezustand. Nach einer Zeitspanne, die länger als Ihr Timer ist, starten Sie Ihren Computer neu und das Anwendungs-Tick-Ereignis ist aufgetreten. Jetzt möchten Sie wissen, wie Sie verhindern können, dass der Timer tickt, während sich Ihr PC im Winterschlaf befindet. Richtig? – froeschli

+0

@froeschli genau –

+0

Entschuldigung, Sie zu enttäuschen, aber ich kann Ihnen keine Lösung für Ihre Frage geben. – froeschli

Antwort

17

Sie können das SystemEvents.PowerModeChanged-Ereignis behandeln, um den Zeitgeber zu stoppen, wenn der Computer angehalten wird, und ihn beim Fortsetzen erneut zu starten.

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

was ist der Zweck für SystemEvents.PowerModeChanged + = SystemEvents_PowerModeChanged; –

+1

Dies ist die Zuweisung von Ereignissen/Delegaten. Immer wenn das Ereignis 'SystemEvents.PowerModeChanged' ausgelöst wird, wird die Methode' SystemEvents_PowerModeChanged' aufgerufen, wobei der Modus im Parameter 'e' an die Funktion übergeben wird. Habe das nicht verifiziert, aber scheint eine plausible Lösung zu sein. – froeschli

+2

Eine wichtige Anmerkung auf der [MSDN-Seite] (http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.powermodchanged%28v=VS.90%29.aspx) für die ' SystemEvents.PowerModeChanged' Ereignis ist, dass Sie den Ereignishandler trennen müssen, wenn Ihre Anwendung entsorgt wird: 'SystemEvents.PowerModeChanged - = SystemEvents_PowerModeChanged;'. –