Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 使用SetThreadExecutionState恢复默认设置后,系统不休眠_Winapi_C# 4.0_Timer_Pinvoke - Fatal编程技术网

Winapi 使用SetThreadExecutionState恢复默认设置后,系统不休眠

Winapi 使用SetThreadExecutionState恢复默认设置后,系统不休眠,winapi,c#-4.0,timer,pinvoke,Winapi,C# 4.0,Timer,Pinvoke,我创建了一个方法来防止系统睡眠,如下所示: public static void KeepSystemAwake(bool bEnable) { if (bEnable) { EXECUTION_STATE state = SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);

我创建了一个方法来防止系统睡眠,如下所示:

    public static void KeepSystemAwake(bool bEnable)
    {
        if (bEnable)
        {
            EXECUTION_STATE state = SetThreadExecutionState(EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
        }
        else
        {
            EXECUTION_STATE state = SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
        }
    }
该方法防止系统睡眠,但当我调用该方法的ES_CONTINUOUS部分时,当我希望系统正常运行时,系统根本不睡眠。我错过了什么?我正在另一个线程(计时器)中运行此代码

我正在另一个线程(计时器)中运行此代码

如果您使用的是类似于
System.Threading.Timer
的回调函数,它将在不同(读取:任意)线程上被调用

发件人:

计时器执行的回调方法应该是可重入的,因为它是在线程池线程上调用的


确保您正在为同一线程调用
SetThreadExecutionState
。理想情况下,您将对一个线程(如主线程)进行串行调用。

当我希望系统正常运行时,系统根本不会休眠。假设您已经证明没有其他进程调用
SetThreadExecutionState
来保持PC处于唤醒状态,对吗?是的。这只是我的申请。当我停止应用程序时,一切都恢复正常。我将尝试在应用程序的UI线程上运行SetThreadExecutionState,并让您知道:)您是对的。我确保SetThreadExecutionState只发生在一个线程上,现在它可以完美地工作。谢谢