我编写了一个C#程序,该程序几乎可以在后台完美运行,但是如果机器被锁定并独自放置,它的速度就会降低。
它每100毫秒打开和关闭一个板载LED,并通过“ System.Threading.Thread.Sleep(100)”调用来计时100毫秒。 (这是用于无头系统(无键盘或显示器)的,它需要闪烁以指示各种状态。)
问题出在系统闲置一会儿并且桌面锁定时...闪烁停止...但是如果我回到机器并登录(现在还不是无头的话),LED就会开始闪烁加速并再次全速闪烁。
我怀疑Windows可能正在执行某种电源管理方案,从而减慢了保存电源的过程(?)。
为清楚起见,设备永远不会进入“睡眠”或“休眠”状态,并且当我重新登录并再次移动鼠标一秒钟时,该过程将返回到正常节奏。使用管理员权限以登录用户身份运行。
此机器上绝对没有防病毒软件。正在使用的资源(内存/ CPU)很小,并且之前和之后的资源基本相等。
有人知道如何构建或执行C#流程,即使用户锁定了桌面并走了几个小时,它仍能以正常速度运行?
编辑:循环中包含的示例代码:
while (true) {
foreach (var step in steps)
{
var mode = step.Mode;
var millis = step.Millis;
switch (mode.ToUpper())
{
//Set LED as per Mode Switch
}
System.Threading.Thread.Sleep(millis);
}
if (!loopForever) {
//User wanted single pattern and then exit
Environment.Exit(0);
}
}
答案 0 :(得分:0)
我们通过使用以下方法解决了WPF应用程序上的此类问题:
var executionState = NativeMethods.SetThreadExecutionState(EXECUTION_STATES.ES_CONTINUOUS | EXECUTION_STATES.ES_SYSTEM_REQUIRED);
NativeMethods.SetThreadExecutionState(executionState);
我希望它可以为您提供帮助。这里还有更多documentation