.net – SystemEvents.PowerModeChanged没有提升Resume事件
发布时间:2020-12-17 07:27:48 所属栏目:百科 来源:网络整理
导读:我有一个WinForms应用程序,可以在系统进入暂停状态(睡眠)和恢复时跟踪. App为此目的使用SystemEvents类.它在我的机器上工作正常.但是,对于某些用户来说,似乎并不总是引发具有PowerModes.Resume的事件.应用程序收到多个PowerModes.Suspend,没有任何PowerModes
我有一个WinForms应用程序,可以在系统进入暂停状态(睡眠)和恢复时跟踪. App为此目的使用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分钟的时间间隔内调用了暂停.它可能是某种“计算机只是部分唤醒,而实际上没有打开显示器左右,并让应用程序处理他们需要的任何东西/网络通知等等,而不是再次入睡”的东西? 解决方法
同意Hans 150%,而不是使用Windows电源管理的粉丝.您最好的选择可能是创建一个随时运行的轻量级服务,并在软件启动时通知您;它已经有一段时间但我相信服务可以在它们再次开始运行时启动事件,启动,暂停等等……
您可以混合使用两者并确认睡眠是服务在进行任何系统暂停日志之前停止的原因.然后使用服务启动/恢复事件重新打开所有内容.您可以将日志记录逻辑放入您的服务中,具体取决于使用此数据的其他内容. 这是来自msdn:https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.oncontinue(v=vs.110).aspx的on continue事件信息 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |