为什么计算机要睡觉会弄乱我的WPF程序以及如何处理它

时间:2011-09-29 02:12:24

标签: wpf usb driver sleep

我有一个WPF程序,它与正在收集数据的专用USB记忆棒(实际上是一个ANT USB加密狗)进行通信。我注意到数据收集在几个小时后就停止了。原因很明显在Windows日志(系统)中,在程序停止获取数据的确切时间,我看到: 系统正在进入睡眠状态 睡眠原因:系统闲置

问题

  1. 如何以编程方式阻止Windows进入休眠状态以便我可以继续收集数据?
  2. 2。向后退一步看大图片......发生了什么事?为什么计算机要睡觉会影响我的程序?或者只是影响USB棒?是否有必要防止睡眠或者我应该做其他事情呢?

    爱因斯坦的答案非常接近。我似乎无法让SetThreadExecutionState在我的C#/ WPF程序中工作,并且找不到很多关于它的例子或讨论。是否需要多次调用?如果是这样的话?是否有我收到的事件要求我给它打电话,或者我应该经常拨打它(5分钟?),如下所述:http://stackoverflow.com/questions/5870280/setthreadexecutionstate-is-not-working-当所谓的-从窗口服务 现在,我只是进入ctrl面板 - >电源选项和防止睡眠,但拥有一个优雅的解决方案肯定会很好。即使在我自己的电脑上,我也不想搞砸睡眠设置。很难记得再把它们放回去!

3 个答案:

答案 0 :(得分:2)

您可以使用SetThreadExecutionState功能阻止计算机进入低功耗模式(睡眠/暂停)。

为什么进入低功耗模式会中断数据采集 - Windows会暂停这些模式下的所有进程,USB端口进入低功耗模式,这可能意味着您的USB设备也无法供电。这是设计的。毕竟,我们希望我们的计算机进入睡眠状态的全部原因是电池没有耗尽。

答案 1 :(得分:1)

您可以应用上述回复,只需您可以进入控制面板 - >电源选项并修改设置,因此您的系统永远不会进入休眠状态。

答案 2 :(得分:0)

至1):您可以在低于Vista的Windows版本上使用SystemParametersInfo与其中一个与电源相关的值来打开/关闭省电设置。从Vista开始,您应该注册其中一个power events,操作系统会在您需要的时候通知您。

To 2):如果操作系统关闭,它管理的硬件将关闭。您还期望发生什么?如果操作系统运行运行USB设备的USB设备驱动程序,如果操作系统进入睡眠状态,您认为会发生什么?没有驱动程序,USB设备开始自行运行?