C# PowerModeChanged触发器延迟

C# PowerModeChanged触发器延迟,c#,.net,windows,C#,.net,Windows,我的应用程序需要在系统睡眠后唤醒后恢复操作。为此,应用程序注册一个PowerModeChanged事件监听器,等待PowerMode.Resume,在那里需要做一些簿记 这段代码在Windows7上运行得很好,但在Windows10上,只有按下一个键或移动鼠标,PowerModeChanged才会启动 public Shell() { Logging.LogMethodEntry(); try { Ini

我的应用程序需要在系统睡眠后唤醒后恢复操作。为此,应用程序注册一个PowerModeChanged事件监听器,等待PowerMode.Resume,在那里需要做一些簿记

这段代码在Windows7上运行得很好,但在Windows10上,只有按下一个键或移动鼠标,PowerModeChanged才会启动

    public Shell()
    {
        Logging.LogMethodEntry();

        try
        {

            InitializeComponent();

            SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
        }
        catch (Exception exc)
        {
            Logging.LogException(exc);
        }

        Logging.LogMethodExit();
    }

    private void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
    {
        Logging.LogMethodEntry(sender, e);

        try
        {
            switch (e.Mode)
            {
                case PowerModes.StatusChange
                case PowerModes.Resume:
                    Logging.LogInfo("Resuming...");
                    // some code here

                    break;
            }
        }
        catch (Exception exc)
        {
            Logging.LogException(exc);
        }

        Logging.LogMethodExit();
    }

我找不到有关Windows 10的此机制中引入的任何更改的任何提示,但可能有一些设置我只是不知道…

PowerModeChanged事件依赖于Windows事件。我们从该事件的文档中注意到,有两个不同的恢复事件-
PBT\u apmresumeautomic
PBT\u apmresumessuspend

我们可以从中看到,.NET只查找这些事件中的第二个,而不是第一个,第二个只定义为激发

如果恢复是由用户输入触发的,例如按键

这似乎符合你的经验。您可能希望将自己的消息处理程序放置到位,以监视第一个事件。但是-

在Windows 10、版本1507或更高版本的系统中,如果系统从睡眠状态恢复只是为了立即进入休眠状态,则不会传递此事件。在这种情况下,不会发送WM_POWERBROADCAST消息


从这个问题上看,你做了什么使系统恢复运行并不明显。用鼠标或键盘就可以了。哦,对了!我的错。系统由任务计划程序中定义的任务恢复。该任务只是启动一个自动关闭的cmd.exe,因为它只需在给定时间恢复系统。其他组件设计为从那里独立运行。因此,系统会恢复,但在鼠标或键盘被拨动之前,一切都会保持静止。看来,来自不信者@Damien_的暗示可能会起作用。我得稍微修改一下我的代码。