2014-10-01 59 views
3

我想在系統進入睡眠之前保存一些用戶的工作,所以在做了一些研究之後,我來了解一下關於SystemEvents.PowerModeChanged但是在這個事件中我的程序沒有完成保存用戶的工作,在此之前,只有系統正在進行睡眠。那麼我應該如何處理這種情況呢?如何在系統進入睡眠之前做一組任務c#

+0

不自動休眠作案保存正在這樣做,一旦你離開睡眠模式可以立即繼續? – Nzall 2014-10-01 10:52:14

+0

@NateKerkhofs,但我想在系統進入睡眠之前做一些自定義的事情(例如,保存系統去睡覺的時間等)。 – 2014-10-01 10:56:38

+0

可能的重複http://stackoverflow.com/questions/16747146/c-sharp-win32-sleep-detection-powermodechanged – yogi 2014-10-01 10:57:38

回答

1
ManagementEventWatcher eventWatcher = new System.Management.ManagementEventWatcher(); 
WqlEventQuery query = new WqlEventQuery("Win32_PowerManagementEvent"); //catch power change events 
eventWatcher.Query = query; 
eventWatcher.EventArrived += new System.Management.EventArrivedEventHandler(eventWatcher_EventArrived); // rgister the event handler 
eventWatcher.Start(); // start the event watcher 

處理程序:

void eventWatcher_EventArrived(object sender, System.Management.EventArrivedEventArgs e) 
{ 
     int eventType = Convert.ToInt32(e.NewEvent.Properties["EventType"].Value); 
     switch (eventType) 
     { 
      case 4://sleep      
        break; 
      case 7://resume 
       break; 
     } 
} 

注意:不要忘記停止觀察家當你的程序退出。

if(eventWatcher != null) 
    eventWatcher.Stop(); 

更多詳細信息...

http://cmehmet6parmak.wordpress.com/2011/06/14/catch-computer-sleep-event-c-windows-7/

+1

操作系統是否等待應用程序在睡覺前完成其工作?我猜不會。 – Reniuz 2014-10-01 11:07:48

+0

@Reniuz OS不會等待應用程序完成其工作。 – 2014-10-01 11:14:50

+0

我自己試過這個,當睡覺後恢復時,我得到了18個EventType。它指的是什麼?或者何時可以找到代碼列表?這似乎是不可能的任務-_- – 2017-10-25 14:51:15