我有一个 WinForms 应用程序,可以跟踪系统何时进入挂起状态(睡眠)以及何时恢复。应用SystemEvents
为此目的使用该类。它在我的机器上运行良好。然而,对于某些用户来说,似乎PowerModes.Resume
并不总是引发事件。应用程序收到多个,中间PowerModes.Suspend
没有任何东西PowerModes.Resume
,这很奇怪。
我的主要问题是这怎么可能发生以及如何避免它并使简历检测可靠?
代码非常简单,基本上遵循(非常缩短):
Imports Microsoft.Win32
Friend Class TehClass
Implements IDisposable
Private Sub New()
AddHandler SystemEvents.PowerModeChanged, AddressOf Me.System_PowerModeChanged
End Sub
Private Sub System_PowerModeChanged(sender As Object, args As PowerModeChangedEventArgs)
Log.Info("Power mode changed: {0}.", args.Mode)
End Sub
#Region "IDisposable Support"
' just dropping handler there
#End Region
End Class
应用程序中始终存在一个现有的表单。但是,它可以最小化或隐藏在通知区域中。还保留了对TehClass
.
这是示例日志:
[2015-09-15 22:38:38,501] Power mode changed: Suspend.
[2015-09-16 07:10:31,106] Power mode changed: Resume.
[2015-09-16 08:54:21,112] Power mode changed: Suspend.
[2015-09-16 09:14:36,252] Power mode changed: Suspend.
[2015-09-16 09:35:21,077] Power mode changed: Suspend.
[2015-09-16 09:55:36,085] Power mode changed: Suspend.
[2015-09-16 10:15:50.122] User reported this log therefore the PC had to be in Working (Resumed) state.
我从日志中注意到的是,实际上第一次引发了 Resume 事件。另一件事是挂起在大约 20 分钟的间隔内被调用。会不会是某种“计算机只是在没有实际打开显示器的情况下部分唤醒,并让应用程序处理他们需要的任何内容/网络通知等/然后再次进入睡眠状态”的东西?