首页 文章

如何在用户离开时防止便携式C#进程减速?

提问于
浏览
0

我写了一个C#程序,它在后台运行得非常完美,但是如果机器被锁定并且单独留下它会减慢速度 .

它每100毫秒打开和关闭一个板载LED,100毫秒由“System.Threading.Thread.Sleep(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);
            }
        }

1 回答

  • 0

    我们通过使用以下方法解决了WPF应用程序上的这类问题:

    var executionState = NativeMethods.SetThreadExecutionState(EXECUTION_STATES.ES_CONTINUOUS | EXECUTION_STATES.ES_SYSTEM_REQUIRED);
    NativeMethods.SetThreadExecutionState(executionState);
    

    我希望它可以帮到你 . 这里更多documentation

相关问题