我创建了一个防止系统休眠的方法,如下所示:
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部分时,系统在我希望它正常运行时根本不会休眠。我错过了什么?我在不同的线程(Timer)中运行此代码
答案 0 :(得分:2)
我在不同的线程(Timer)中运行此代码
如果您使用类似System.Threading.Timer
回调的内容,则会在不同的(读取:任意)线程上调用它。
来自MSDN:
计时器执行的回调方法应该是可重入的,因为它是在ThreadPool线程上调用的
确保您为同一个帖子调用SetThreadExecutionState
。理想情况下,您将调用序列化到一个线程(如主线程)。