欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ī)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

最開始我的解決方法是關(guān)閉休眠,后來發(fā)現(xiàn)這種策略并不是很好:下載完成后,如果仍然繼續(xù)保持開機(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)文章,可以通過這個(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),可以組合使用。主要說明如下:

  • 只使用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ù)

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

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

相關(guān)文章

  • 關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介紹方法

    關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.

    本篇文章,小編為大家介紹關(guān)于C# 5.0 CallerMemberName CallerFilePath CallerLineNumber 在.NET4中的使用介紹方法,有需要的朋友可以參考一下
    2013-04-04
  • c# 調(diào)用Win32Api關(guān)閉當(dāng)前應(yīng)用的方法

    c# 調(diào)用Win32Api關(guān)閉當(dāng)前應(yīng)用的方法

    這篇文章主要介紹了c# 調(diào)用Win32Api關(guān)閉當(dāng)前應(yīng)用的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解

    這篇文章主要為大家介紹了Unity技術(shù)手冊之Slider滑動(dòng)器使用實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • C#實(shí)現(xiàn)類似jQuery的方法連綴功能

    C#實(shí)現(xiàn)類似jQuery的方法連綴功能

    這篇文章主要介紹了C#實(shí)現(xiàn)類似jQuery的方法連綴功能,可以簡化語句,使代碼變得清晰簡單,感興趣的小伙伴們可以參考一下
    2015-11-11
  • C# NetRemoting實(shí)現(xiàn)雙向通信

    C# NetRemoting實(shí)現(xiàn)雙向通信

    本篇文章主要介紹了C# NetRemoting實(shí)現(xiàn)雙向通信,.Net Remoting 是由客戶端通過Remoting,訪問通道以獲得服務(wù)端對象,再通過代理解析為客戶端對象來實(shí)現(xiàn)通信的
    2017-03-03
  • c# 生成二維碼的示例

    c# 生成二維碼的示例

    這篇文章主要介紹了c# 生成二維碼的示例,幫助大家更好的理解和使用c#編程語言,感興趣的朋友可以了解下
    2020-11-11
  • WPF中TreeView控件的用法

    WPF中TreeView控件的用法

    這篇文章介紹了WPF中TreeView控件的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • c#之用戶定義的數(shù)據(jù)類型轉(zhuǎn)換介紹

    c#之用戶定義的數(shù)據(jù)類型轉(zhuǎn)換介紹

    c#允許定義自己的數(shù)據(jù)類型,這意味著需要某些工具支持在自己的數(shù)據(jù)類型間進(jìn)行數(shù)據(jù)轉(zhuǎn)換。方法是把數(shù)據(jù)類型轉(zhuǎn)換定義為相關(guān)類的一個(gè)成員運(yùn)算符,數(shù)據(jù)類型轉(zhuǎn)換必須聲明是隱式或者顯式,以說明怎么使用它
    2014-01-01
  • C#實(shí)現(xiàn)獲取磁盤空間大小的方法

    C#實(shí)現(xiàn)獲取磁盤空間大小的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)獲取磁盤空間大小的方法,分別基于System.IO.DriveInfo.GetDrives方法與ManagementClass("Win32_LogicalDisk")來實(shí)現(xiàn)這一功能,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-12-12
  • C#讀取XML中元素和屬性值的實(shí)現(xiàn)代碼

    C#讀取XML中元素和屬性值的實(shí)現(xiàn)代碼

    用C#讀取xml有很多方式,這里我就先使用XmlDocument讀取Xml,用一段代碼遍歷所有元素,并打印student的所有屬性和子節(jié)點(diǎn)的值
    2013-04-04

最新評論