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

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

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

最近寫了一個(gè)下載程序,發(fā)現(xiàn)有一個(gè)問(wèn)題:掛機(jī)下載的時(shí)候,下載任務(wù)會(huì)因?yàn)橄到y(tǒng)休眠被終止掉。

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

因此,最好的方式是:在下載的時(shí)候阻止系統(tǒng)休眠。即不會(huì)因?yàn)樾菝叨K止下載任務(wù),下載完成后自動(dòng)轉(zhuǎn)為休眠狀態(tài)省電,都不用做下載完成后自動(dòng)關(guān)機(jī)功能了。

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

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

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

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

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

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

  • 組合使用Continuous參數(shù)時(shí),實(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)休眠計(jì)時(shí)器
        /// </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);
        }
    }

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

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

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

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

相關(guān)文章

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

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

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

    深入淺析C#中的var和dynamic

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

    c# Parallel類的使用

    這篇文章主要介紹了c# Parallel類的使用,幫助大家實(shí)現(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)限。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果

    Unity UGUI實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果

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

    少見(jiàn)的C# RSA算法

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

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

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

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

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

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

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

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

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

最新評(píng)論

蓝田县| 合江县| 革吉县| 通海县| 阳新县| 岐山县| 石嘴山市| 松溪县| 老河口市| 织金县| 湘西| 鸡东县| 铅山县| 九江市| 琼海市| 马关县| 贞丰县| 成都市| 新龙县| 德格县| 连州市| 开化县| 河东区| 康乐县| 腾冲县| 日照市| 铁岭市| 手机| 十堰市| 吴江市| 林周县| 县级市| 巴彦淖尔市| 麻城市| 金平| 太康县| 循化| 剑阁县| 海安县| 贵州省| 满洲里市|