Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.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
C# 程序不会停止计算机睡眠_C#_Sleep_Suspend - Fatal编程技术网

C# 程序不会停止计算机睡眠

C# 程序不会停止计算机睡眠,c#,sleep,suspend,C#,Sleep,Suspend,我的应用程序设置为在单击通知提示时进入睡眠状态,并且此过程全部循环。这是可行的,但当我唤醒我的计算机时,它很快就会进入睡眠状态(这有一点时间延迟,但由于这需要的时间与我的计算机正常进入睡眠状态所需的时间一样长,我不会考虑这一点)。我已经从我的整个程序中删除了这个片段,然后这个程序运行得非常好,让我觉得这段代码中有某种东西让计算机进入睡眠状态。此外,如果控制循环的一个标志被重置,我已经重置了这些标志,但是问题一直在发生。万一(出于某种奇怪的原因)布尔运算符影响了它,我已经尽可能地对它们进行了组合更

我的应用程序设置为在单击通知提示时进入睡眠状态,并且此过程全部循环。这是可行的,但当我唤醒我的计算机时,它很快就会进入睡眠状态(这有一点时间延迟,但由于这需要的时间与我的计算机正常进入睡眠状态所需的时间一样长,我不会考虑这一点)。我已经从我的整个程序中删除了这个片段,然后这个程序运行得非常好,让我觉得这段代码中有某种东西让计算机进入睡眠状态。此外,如果控制循环的一个标志被重置,我已经重置了这些标志,但是问题一直在发生。万一(出于某种奇怪的原因)布尔运算符影响了它,我已经尽可能地对它们进行了组合更改,但它仍然不起作用!我尝试添加一个命令来阻止计算机进入睡眠状态,但也没有成功。有什么建议吗?非常感谢

for (; ; )
{
    bool for3 = false;
    for (; ; )
    {
        notifyIcon.ShowBalloonTip(10000);
        System.Threading.Thread.Sleep(10000);
        Application.DoEvents();
        if (loopVariable)
            for3 = true;
        if (for3) break;
        System.Threading.Thread.Sleep(60000);
    }
    loopVariable = false;
    for3 = false;
    DateTime timeOnSleep = DateTime.Now;
    Application.SetSuspendState(PowerState.Suspend, false, false);//this is the annoying code
        DateTime timeOnWake = DateTime.Now;
        TimeSpan time = timeOnWake - timeOnSleep;
        var minutes = time.TotalMinutes;
        Math.Round(time.TotalMinutes, MidpointRounding.AwayFromZero);
        double dMins = minutes;
        try
        {
            int iNumber = System.Convert.ToInt32(dMins);
        }
        catch (System.OverflowException)
        {
            if (dMins >= 40)
                break;
        }
    }
private static bool loopVariable = false;

void notifyIcon_BalloonTipClicked(object sender, EventArgs e)
{
    loopVariable = true;
}

如果你发现自己在使用doevents,你很可能做错了什么。如果需要运行这样的循环,请使用
do{}
而不是
for(;;)
。在任何情况下,你都不需要这些东西。如果这不是无限期运行,您可以在调用
Application.SetSuspendState
之前禁用计时器

    void Main()
    { 
        Timer timer = new Timer();
        timer.Tick += new EventHandler(timer_Tick);
        timer.Interval = 30000; //How often you want to show the tooltip?
        timer.Enabled = true;
    }

    void notifyIcon1_BalloonTipClicked(object sender, EventArgs e)
    {
        Application.SetSuspendState(PowerState.Suspend, false, false);
    }

    void timer_Tick(object sender, EventArgs e)
    {
        notifyIcon1.ShowBalloonTip(10000);
    }

与其让我们阅读出现故障的代码,不如在这里描述一下您试图完成的任务。我试图在单击notifyIcon时让计算机进入睡眠状态(正常工作),但当我唤醒计算机时,它会在我仍在运行程序时再次进入睡眠状态。这是一个奇怪的循环。还有,从哪里调用列出的代码?如果我理解正确,您所指的循环是循环睡眠事件,根据权利,它不应该发生。正如我上面所描述的,当我唤醒计算机时,它会不断地进入睡眠状态:一些不应该发生的事情。相反,它应该中断上面显示的第一个for循环,或者返回到该循环的开头。该代码是在创建表单之后调用的,即在InitializeComponent()之后直接调用;