c# - Windows 服务 OnPowerEvent

标签 c# windows service sleep suspend

我正在尝试实现一个 Windows 服务,该服务在系统进入待机模式( sleep )时发送一条消息。我的测试机操作系统是 Windows 8 专业版。该服务已覆盖 CanHandlePowerEvents=true 和 OnPowerEvent,它确实接收到电源事件。

我遇到的问题是:OnPowerEvent 从来没有收到 QuerySuspend 消息。然而,它确实在计算机进入挂起状态之前收到挂起消息,但操作系统不会等待 OnPowerEvent 方法完成,它只是进入挂起模式而不管,然后在恢复后,OnPowerEvent 方法的执行将继续。

通过 Internet 发送消息可能需要 1-2 秒,因此它总是在计算机恢复后发送,而不是在进入挂起模式之前发送,因为它应该正常工作。

任何关于如何解决这个问题的想法,任何人?

最佳答案

在 Vista 和更新版本中,应用程序有两秒钟的时间来完成由 PBT_APMSUSPEND 事件触发的任何操作。此设置不可配置。

当应用程序收到系统即将进入休眠的通知时,它应该迅速执行任何必要的操作并退出消息循环。在超时前处理此消息时,系统允许每个应用程序最多有两秒的时间。

http://msdn.microsoft.com/en-us/library/aa373223%28v=vs.85%29.aspx

http://blogs.msdn.com/b/oldnewthing/archive/2011/11/24/10241125.aspx

关于c# - Windows 服务 OnPowerEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20731815/

相关文章:

c# - 如何在不安装的情况下在 WPF 应用程序中包含外部字体

c# - 如何使用 ObjectListView 自动换行列中的文本

c# - 在 Visual Studio 2022 上为 Windows 服务创建安装程序

json - 如何使用 PowerShell 在没有索引的情况下访问 JSON 文件中的数组对象

c# - 禁用第二个 USB 键盘

c# - 获取 ListBox 中的 ListBoxItem

.net - 新的 Windows 版本中是否包含所有 .NET Framework 版本?

java - 使用 Windows 7 与 Mac OS X 的 Eclipse 中的图像路径

c# - 如何在 C# Windows 应用程序中获取网格的列值?

c# - 一个对象能够将自己保存到数据库中是否会破坏类的凝聚力?