Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动和自动之间的区别;恢复Windows服务的挂起模式_C#_.net_Windows Services - Fatal编程技术网

C# 自动和自动之间的区别;恢复Windows服务的挂起模式

C# 自动和自动之间的区别;恢复Windows服务的挂起模式,c#,.net,windows-services,C#,.net,Windows Services,据 ResumeAutomic:计算机已自动唤醒以处理事件 注意:如果系统在广播ResumeSuplate Automatic后检测到任何用户活动,它将广播ResumeSuplate事件,让应用程序知道它们可以恢复与用户的完全交互 ResumeSupspend:系统在挂起后已恢复运行 这是否意味着当计算机从睡眠中醒来时调用“ResumeAutomic”,当用户在输入凭据后登录时调用“ResumeSupspend”? 我正在使用tcp套接字与服务器通信。因此,为了在系统从休眠状态恢复时重新连接到服

ResumeAutomic:计算机已自动唤醒以处理事件

注意:如果系统在广播ResumeSuplate Automatic后检测到任何用户活动,它将广播ResumeSuplate事件,让应用程序知道它们可以恢复与用户的完全交互

ResumeSupspend:系统在挂起后已恢复运行

这是否意味着当计算机从睡眠中醒来时调用“ResumeAutomic”,当用户在输入凭据后登录时调用“ResumeSupspend”?

我正在使用tcp套接字与服务器通信。因此,为了在系统从休眠状态恢复时重新连接到服务,我有以下代码

    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::电源状态为:ResumeSupspend


20150525#103431::电源状态为:暂停

20150525#103525::电源状态为:ResumeSupspend

20150525#103525::电源状态为:恢复自动


20150525#103558::电源状态为:暂停

20150525#103835::电源状态为:ResumeAutomatic

它应该如何工作 (实践中并非如此——见下文。)

自动恢复 此消息始终在计算机睡眠后恢复时发送

恢复暂停 计算机在睡眠后已恢复,Windows认为有用户在场,即有人坐在计算机前面。当a)唤醒是由人与人之间的交互(某人按下电源按钮、按键、移动鼠标等)引起时,发送此消息;或b)由于唤醒计时器,机器自动唤醒后第一次出现人机交互

要直接回答您的问题,用户第一次与计算机交互时会发送ResumeSupspend。这可能是输入密码来解锁它,但不一定要输入密码。如果用户只是晃动鼠标,仍然会发送ResumeSupspend。

总结如下:
  • 当计算机从睡眠状态恢复时,始终会发送ResumeAutomatic
  • 当计算机从睡眠状态恢复并且Windows认为有用户在场时,将发送ResumeSupspend和ResumeAutomic

  • 它实际上是如何工作的
  • 简历根本不发送。这是一个长期存在的bug,大概是Windows本身的bug。幸运的是,我从来没有见过电脑在同时运行ResumeAutomatic和ResumeSupspend unsent时醒来如果您需要知道系统已恢复,但不关心用户是否在,则需要同时侦听ResumeAutomatic和ResumeSupspend,并将它们视为同一事物。
  • 这是非常不可靠的。我从未见过它在应该发送的时候不被发送,但它经常在不应该发送的时候被发送——实际上根本没有用户。我不知道这是由于Windows、第三方驱动程序、固件还是硬件中的一个或多个bug造成的
  • 在发送ResumeAutomic时,如果没有相应的ResumeSupspend,则系统空闲超时会很短(在Windows 10中默认为2分钟),并且连接的显示器会保持在省电模式。发送相应的ResumeSupspend时,系统空闲超时正常(在Windows 10中默认为30分钟),并唤醒附加的显示。这样,如果计算机自动醒来执行维护等操作,它就会尽快恢复睡眠。如果微软能让它可靠地工作,那就太棒了

  • 我很不幸,不得不深入到Windows对电源管理、配置文件等的支持的兔子洞里。Vista时代的东西令人沮丧,因为它基于质量和周到的设计,但实现和文档都不太到位,而且从未被修复。还有许多其他琐碎的问题,我在这里没有讨论过。这有点遗憾。

    谢谢你的详细解释。由于我从未在任何地方看到任何与此相关的文档,我想知道您是如何得出结论的。你有没有和微软的技术支持人员谈过,或者你有没有深入研究过windows的内部代码?@Fadi:微软从来没有参与过,不过我当然想看看源代码!只需要数周(数周)的痛苦、系统的测试。我曾参与过一款严重依赖Windows电源配置文件、睡眠/空闲到睡眠行为等的产品。当您将Windows错误、固件错误、驱动程序错误和文档错误/不足结合在一起时,疯狂在于等待。