gpt4 book ai didi

.net - SystemEvents.PowerModeChanged 不引发恢复事件

转载 作者:行者123 更新时间:2023-12-04 15:56:10 26 4
gpt4 key购买 nike

我有一个 WinForms 应用程序,它跟踪系统何时进入挂起状态( sleep )和何时恢复。应用程序使用 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 电源管理。最好的办法可能是创建一个轻量级服务,它始终运行并在软件启动时通知您的软件;已经有一段时间了,但我相信服务可以在它们再次开始运行、启动、暂停等时立即触发事件......

您可以混合使用这两种方法,并在记录系统暂停之前确认 sleep 是服务停止的原因。然后使用服务启动/恢复事件重新打开一切。您可能可以根据其他使用此数据的方式将日志记录逻辑放入您的服务中。

这是来自 msdn 的 on continue 事件信息:https://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.oncontinue(v=vs.110).aspx

关于.net - SystemEvents.PowerModeChanged 不引发恢复事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625511/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com