2011-01-01 26 views
9

私はある時間後に特定のタスクを行うアプリケーションを持っています(タイマーによって制御されます)。しかし、私がPCを起動するたびに、そのアプリケーションが実行されます。これは、少なくとも1つのティックのために休止状態の間、タイマーが動作し続けることを意味します。どうすればこの問題を回避できますか?C#winformアプリケーションで休止/スリープモード中にタイマーを停止するには?

+0

ただ、この権利を取得するには、タイマーは、あなたが書いた(C#?)アプリケーション内です。タイマーを開始するアプリケーションを起動します。その後、あなたのPC(Windows OSを前提とする)をスリープ状態または休止状態にします。タイマーより長い時間が経過すると、コンピュータを再起動すると、アプリケーションのティックイベントが発生します。今あなたは知ってほしい、どのようにあなたのPCが休止中にタイマーを '刻む'から防ぐために。正しい? – froeschli

+0

@froeschli正確に –

+0

あなたを失望させて申し訳ありませんが、私はあなたの質問に答えを与えることはできません。 – froeschli

答えて

17

SystemEvents.PowerModeChangedイベントを処理して、マシンがサスペンドしているときにタイマーを停止し、再開時に再びタイマーを開始することができます。

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

SystemEvents.PowerModeChanged + = SystemEvents_PowerModeChangedの目的は何ですか; –

+1

イベント/デリゲートの割り当てです。 'SystemEvents.PowerModeChanged'イベントが発生するたびに、メソッド' SystemEvents_PowerModeChanged'が呼び出され、パラメータeのモードが関数に渡されます。これを確認していないが、もっともらしい解決策のようだ。 – froeschli

+2

「MSDNページ」(http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.powermodechanged%28v=VS.90%29.aspx)から重要な点の1つは、 SystemEvents.PowerModeChanged'イベントは、アプリケーションが破棄されたときにイベントハンドラをデタッチする必要があるということです: 'SystemEvents.PowerModeChanged - = SystemEvents_PowerModeChanged;'。 –

関連する問題