根据MSDN documentation
这是否意味着当计算机从 sleep 中唤醒时会调用“ResumeAutomatic”,而在用户输入凭据后登录时会调用“ResumeSuspend”吗?
我正在使用tcp套接字与服务器通信。因此,为了在系统从 sleep 状态恢复时重新连接到服务,我有以下代码
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
Logger.Log("Power status is : " + powerStatus);
if (powerStatus == PowerBroadcastStatus.ResumeAutomatic)
{
ConnectionWatchdog.ReConnect();
}
return base.OnPowerEvent(powerStatus);
}
但是我发现枚举值是随机的。以下是在3次不同的唤醒时间下的3条不同的迹线。20150525#094449::电源状态为:暂挂
20150525#094716::电源状态为:ResumeSuspend
20150525#103431::电源状态为:暂挂
20150525#103525::电源状态为:ResumeSuspend
20150525#103525::电源状态为:ResumeAutomatic
20150525#103558::电源状态为:暂挂
20150525#103835::电源状态为:ResumeAutomatic
最佳答案
它应该如何工作
(实际上,这不是所有方法的工作方式-参见下文。)
恢复自动
当计算机在 sleep 后恢复后,始终会发送此消息。
恢复挂起
sleep 后计算机已恢复运行,并且Windows认为有用户在场-即在机器前坐着一个人。当以下情况之一时,发送此消息:a)唤醒是由人为交互(有人按下电源按钮,按下某个键,移动鼠标等)引起的;或b)机器由于唤醒计时器而自动唤醒后,第一次进行人机交互。
为了直接回答您的问题,ResumeSuspend是在用户第一次与计算机进行交互时发送的。可以输入密码来解锁,但这不是必须的。如果用户只是扭动鼠标,ResumeSuspend仍将被发送。
总结一下:
当计算机从 sleep 状态恢复时,始终发送
实际运作方式
不幸的是,我不得不深入Windows对电源管理,配置文件等的支持。Vista时代的东西令人沮丧,因为它基于质量和周到的设计,但是实现和文档均如此还不完全存在,并且从未修复过。我还没有深入探讨其他许多小问题。真是太丢人了。
关于c# - Windows Service的ResumeAutomatic和ResumeSuspend模式之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30433432/