不才载的时候阻止系统休眠。即不会因为休眠而终止下载任务,下载完成后自动转为休眠状态省电,都不用做下载完成后自动关机成果了。
查了一下相关文章,可以通过这个SetThreadExecutionState API实现阻止系统休眠。它在C#中的声明方法如下:
[DllImport("kernel32.dll")] static extern uint SetThreadExecutionState(ExecutionFlag flags); [Flags] enum ExecutionFlag : uint { System = 0x00000001, Display = 0x00000002, Continus = 0x80000000, }
它就一个flags参数,这个参数有三个选项,可以组合使用。主要说明如下:
只使用Continus参数时,则是恢复系统休眠计谋。
不使用Continus参数时,实现阻止系统休眠或显示器*一次
组合使用Continus参数时,实现阻止系统休眠或显示器*至线程终止
因此,它一共有三种使用方法,这里我就封装了一下:
class SystemSleepManagement { //界说API函数 [DllImport("kernel32.dll")] static extern uint SetThreadExecutionState(ExecutionFlag flags); [Flags] enum ExecutionFlag : uint { System = 0x00000001, Display = 0x00000002, Continus = 0x80000000, } /// <summary> ///阻止系统休眠,直到线程结束恢复休眠计谋 /// </summary> /// <param>是否阻止*显示器</param> public static void PreventSleep(bool includeDisplay = false) { if (includeDisplay) SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display | ExecutionFlag.Continus); else SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Continus); } /// <summary> ///恢复系统休眠计谋 /// </summary> public static void ResotreSleep() { SetThreadExecutionState(ExecutionFlag.Continus); } /// <summary> ///重置系统休眠计时器 /// </summary> /// <param>是否阻止*显示器</param> public static void ResetSleepTimer(bool includeDisplay = false) { if (includeDisplay) SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display); else SetThreadExecutionState(ExecutionFlag.System); } }
因此,要实现下载时阻止措施休眠,则有两种实现方法:
下载期间起计时器按期执行ResetSleepTimer函数
下载开始时执行PreventSleep函数,下载结束后执行ResotreSleep函数。
此外,和阻止系统休眠类似,有的措施还需要有阻止屏保成果。因为我的措施目前还用不到,这里就不久不多讲了。
应用场景:
1、挂机下载的时候,下载任务会因为系统休眠被终止失。
最开始我的解决要领是*休眠,后来发明这种计谋并不是很好:下载完成后,如果仍然继续连结开机状态浪费电。
2、比来衣服本身洗在开发过程中遇到一个需求就是在不改削电源打点选项的情况下,阻止系统进入休眠状态。
和我们的需求对照类似的是视频播放器,在播放视频的时候,即使用户没有操纵电脑,,也会阻止休眠。退出播放器后,系统又正常了。