用于检测系统在C#中从睡眠状态唤醒的事件

Pan*_*kaj 27 c# windows events

我需要检测系统电源状态模式.确切地说,我需要一个事件,当Windows 7从睡眠中醒来时会激活.我已经在使用:

SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
Run Code Online (Sandbox Code Playgroud)

但是这个事件的问题在于它被提升了四次:可能是在计算机进入睡眠模式和计算机唤醒之后.我想要一个只在计算机唤醒时引发的事件.这有什么事吗?

Mar*_*cus 39

SystemEvents.PowerModeChanged += OnPowerChange;

private void OnPowerChange(object s, PowerModeChangedEventArgs e) 
{
    switch ( e.Mode ) 
    {
        case PowerModes.Resume: 
        break;
        case PowerModes.Suspend:
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

你应该读这个:http: //msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.powermodechanged.aspx

  • 不要忘记取消订阅事件:`SystemEvents.PowerModeChanged - = OnPowerChange;` (5认同)
  • 似乎不适用于“新”连接/现代待机模式......这个问题的可能替代品:/sf/ask/1408348021/ /55676206#55676206 (2认同)
  • @AdilMalik因为这是一个静态事件。预订事件后,拥有该事件的类将维护对订户的引用。只要存在此引用,垃圾收集器就无法收集该订户,并且会发生内存泄漏。 (2认同)

Moo*_*ice 7

您需要检查传递给事件的Mode属性PowerModeChangedEventArgs.

来自MSDN:

  • Resume 操作系统即将从暂停状态恢复.

  • StatusChange 操作系统引发了电源模式状态通知事件.这可能表示电池电量不足或充电,交流电源与电池之间的转换,或系统电源状态的其他变化.

  • Suspend 操作系统即将暂停.