最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#運行程序時阻止關(guān)閉顯示器和系統(tǒng)待機

 更新時間:2022年06月18日 10:51:47   作者:天方  
這篇文章介紹了C#運行程序時阻止關(guān)閉顯示器和系統(tǒng)待機的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近寫了一個下載程序,發(fā)現(xiàn)有一個問題:掛機下載的時候,下載任務(wù)會因為系統(tǒng)休眠被終止掉。

最開始我的解決方法是關(guān)閉休眠,后來發(fā)現(xiàn)這種策略并不是很好:下載完成后,如果仍然繼續(xù)保持開機狀態(tài)浪費電。

因此,最好的方式是:在下載的時候阻止系統(tǒng)休眠。即不會因為休眠而終止下載任務(wù),下載完成后自動轉(zhuǎn)為休眠狀態(tài)省電,都不用做下載完成后自動關(guān)機功能了。

查了一下相關(guān)文章,可以通過這個SetThreadExecutionState API實現(xiàn)阻止系統(tǒng)休眠。它在C#中的聲明方式如下:

    [DllImport("kernel32.dll")]
    static extern uint SetThreadExecutionState(ExecutionFlag flags);

    [Flags]
    enum ExecutionFlag : uint
    {
        System = 0x00000001,
        Display = 0x00000002,
        Continuous = 0x80000000,
    }

它就一個flags參數(shù),這個參數(shù)有三個選項,可以組合使用。主要說明如下:

  • 只使用Continuous參數(shù)時,則是恢復(fù)系統(tǒng)休眠策略。

  • 不使用Continuous參數(shù)時,實現(xiàn)阻止系統(tǒng)休眠或顯示器關(guān)閉一次

  • 組合使用Continuous參數(shù)時,實現(xiàn)阻止系統(tǒng)休眠或顯示器關(guān)閉至線程終止

因此,它一共有三種使用方式,這里我就封裝了一下:

    class SystemSleepManagement
    {
        //定義API函數(shù)
        [DllImport("kernel32.dll")]
        static extern uint SetThreadExecutionState(ExecutionFlag flags);

        [Flags]
        enum ExecutionFlag : uint
        {
            System = 0x00000001,
            Display = 0x00000002,
            Continuous = 0x80000000,
        }

        /// <summary>
        ///阻止系統(tǒng)休眠,直到線程結(jié)束恢復(fù)休眠策略
        /// </summary>
        /// <param name="includeDisplay">是否阻止關(guān)閉顯示器</param>
        public static void PreventSleep(bool includeDisplay = false)
        {
            if (includeDisplay)
                SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display | ExecutionFlag.Continuous);
            else
                SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Continuous);
        }

        /// <summary>
        ///恢復(fù)系統(tǒng)休眠策略
        /// </summary>
        public static void RestoreSleep()
        {
            SetThreadExecutionState(ExecutionFlag.Continuous);
        }

        /// <summary>
        ///重置系統(tǒng)休眠計時器
        /// </summary>
        /// <param name="includeDisplay">是否阻止關(guān)閉顯示器</param>
        public static void ResetSleepTimer(bool includeDisplay = false)
        {
            if (includeDisplay)
                SetThreadExecutionState(ExecutionFlag.System | ExecutionFlag.Display);
            else
                SetThreadExecutionState(ExecutionFlag.System);
        }
    }

因此,要實現(xiàn)下載時阻止程序休眠,則有兩種實現(xiàn)方式:

  • 下載期間起計時器定期執(zhí)行ResetSleepTimer函數(shù)

  • 下載開始時執(zhí)行PreventSleep函數(shù),下載結(jié)束后執(zhí)行RestoreSleep函數(shù)。

到此這篇關(guān)于C#運行程序時阻止關(guān)閉顯示器和系統(tǒng)待機的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#創(chuàng)建dll類庫的圖文步驟

    C#創(chuàng)建dll類庫的圖文步驟

    類庫讓我們的代碼可復(fù)用,我們只需要在類庫中聲明變量一次,就能在接下來的過程中無數(shù)次地使用,而無需在每次使用前都要聲明它。這樣一來,就節(jié)省了我們的內(nèi)存空間,需要的朋友可以參考下
    2017-01-01
  • 深入淺析C#中的var和dynamic

    深入淺析C#中的var和dynamic

    這篇文章給大家介紹了C#中的var和dynamic的相關(guān)知識,var和dynamic的本質(zhì)區(qū)別是類型判斷的時間不同,前者是編譯時,后者是運行時。具體內(nèi)容詳情大家通過本文學(xué)習(xí)下吧
    2018-05-05
  • c# Parallel類的使用

    c# Parallel類的使用

    這篇文章主要介紹了c# Parallel類的使用,幫助大家實現(xiàn)數(shù)據(jù)與任務(wù)的并行,感興趣的朋友可以了解下
    2020-11-11
  • asp.net core mvc權(quán)限控制:在視圖中控制操作權(quán)限

    asp.net core mvc權(quán)限控制:在視圖中控制操作權(quán)限

    本文主要介紹了asp.net core mvc權(quán)限控制:在視圖中控制操作權(quán)限。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Unity UGUI實現(xiàn)滑動翻頁效果

    Unity UGUI實現(xiàn)滑動翻頁效果

    這篇文章主要為大家詳細(xì)介紹了Unity UGUI實現(xiàn)滑動翻頁效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 少見的C# RSA算法

    少見的C# RSA算法

    這篇文章主要介紹了非常少見的C# RSA算法,文章簡單易懂,實例代碼幫助大家更好的學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C#中多線程更新UI控件的常用方案

    C#中多線程更新UI控件的常用方案

    在C#中,特別是在使用Windows窗體(WinForms)或WPF(Windows Presentation Foundation)進(jìn)行UI開發(fā)時,處理多線程與UI控件的交互需要特別小心,本文給大家介紹了幾種在C#中安全地從多線程更新UI控件的常用方案,需要的朋友可以參考下
    2024-07-07
  • 總結(jié)C#動態(tài)調(diào)用WCF接口的兩種方法

    總結(jié)C#動態(tài)調(diào)用WCF接口的兩種方法

    這篇文章給大家總結(jié)了C#動態(tài)調(diào)用WCF接口的兩種方法,大家可以根據(jù)自己的需求選擇對應(yīng)的方式,下面來一起看看。
    2016-09-09
  • 使用C#獲取網(wǎng)頁HTML源碼的例子

    使用C#獲取網(wǎng)頁HTML源碼的例子

    這篇文章主要介紹了使用C#獲取網(wǎng)頁HTML源碼的例子,考慮了區(qū)分GB2312和UTF-8編碼,需要的朋友可以參考下
    2014-08-08
  • C#實現(xiàn)屬于自己的QQ截圖工具

    C#實現(xiàn)屬于自己的QQ截圖工具

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)屬于自己的QQ截圖工具的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04

最新評論

新野县| 周口市| 英吉沙县| 仙居县| 宿松县| 赤峰市| 甘洛县| 乌鲁木齐县| 大安市| 资阳市| 榆树市| 辽阳县| 霍山县| 四会市| 亳州市| 永顺县| 鲁甸县| 会泽县| 巨鹿县| 九龙城区| 克拉玛依市| 甘肃省| 色达县| 正阳县| 丰城市| 武清区| 进贤县| 古交市| 龙门县| 静乐县| 黄山市| 奉节县| 玉龙| 苏尼特左旗| 诏安县| 黄陵县| 新巴尔虎右旗| 丹巴县| 西林县| 乌鲁木齐市| 北辰区|