Cur*_*ous 5 .net c# windows-services
根据MSDN文档
ResumeAutomatic:计算机已自动唤醒以处理事件.
注意:如果系统在广播ResumeAutomatic后检测到任何用户活动,它将广播ResumeSuspend事件,让应用程序知道他们可以恢复与用户的完全交互.
ResumeSuspend:系统暂停后恢复运行.
这是否意味着当计算机从睡眠状态唤醒时调用"ResumeAutomatic"并在用户输入凭据后登录时调用"ResumeSuspend"?
我正在使用tcp套接字与服务器通信.因此,为了在系统从休眠状态恢复时重新连接到服务,我有以下代码
protected override bool OnPowerEvent(PowerBroadcastStatus powerStatus)
{
Logger.Log("Power status is : " + powerStatus);
if (powerStatus == PowerBroadcastStatus.ResumeAutomatic)
{
ConnectionWatchdog.ReConnect();
}
return base.OnPowerEvent(powerStatus);
}
Run Code Online (Sandbox Code Playgroud)
但我观察到枚举值是随机的.以下是3种不同唤醒时间的3种不同痕迹.
20150525#094449 ::电源状态为:暂停
20150525#094716 ::电源状态为:ResumeSuspend
20150525#103431 ::电源状态为:暂停
20150525#103525 ::电源状态为:ResumeSuspend
20150525#103525 ::电源状态为:ResumeAutomatic
20150525#103558 ::电源状态为:暂停
20150525#103835 ::电源状态为:ResumeAutomatic
(这不是它在实践中的运作方式 - 见下文.)
当计算机在睡眠后恢复时,始终会发送此消息.
睡眠后计算机已恢复,Windows认为用户在场 - 即机器前面有人坐着.当a)唤醒是由人为交互(某人按下电源按钮,按下按键,移动鼠标等)引起时,会发送此消息; 或b)由于唤醒定时器,机器自动唤醒后第一次出现人机交互.
要直接回答您的问题,ResumeSuspend将在用户第一次与计算机进行交互时发送.这可能是输入密码来解锁它,但它不一定是.如果用户只是挥动鼠标,仍会发送ResumeSuspend.
我不得不深入了解Windows对电源管理,配置文件等的支持.Vista时代的东西令人沮丧,因为它基于质量和周到的设计,但实现和文档是不能令人信服,也从未得到修复.还有很多其他问题我没有进入这里.这有点遗憾.