【问题标题】:program will not stop sleeping computer程序不会停止睡眠计算机
【发布时间】:2014-02-12 16:48:52
【问题描述】:

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

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;
}

【问题讨论】:

  • 与其让我们阅读故障代码,不如在此处描述您要完成的工作。
  • 我正在尝试在单击 notifyIcon 时让计算机进入睡眠状态(这有效),但是当我唤醒计算机时,它会在我仍在运行程序时再次进入睡眠状态。
  • 这个奇怪的循环是怎么回事?
  • 另外,您列出的代码是从哪里调用的?
  • 如果我理解正确,您所指的循环是循环睡眠事件,按理说不应该发生。正如我上面所描述的,当我唤醒计算机时,它会不断地进入睡眠状态:这是不应该发生的事情。相反,它应该中断上面显示的第一个 for 循环,或者返回到该循环的开头。此代码在表单创建后立即调用,即在 InitializeComponent();

标签: c# sleep suspend


【解决方案1】:

如果您发现自己在使用 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);
    }

【讨论】:

    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2012-05-29
    • 2016-04-05
    • 2014-05-15
    • 2017-01-05
    相关资源
    最近更新 更多