программа не остановит спящий компьютер

Мое приложение настроено на переход в спящий режим при нажатии всплывающей подсказки с уведомлением, и этот процесс зацикливается. Это работает, но когда я пробуждаю свой компьютер, он вскоре после этого переходит в спящий режим (это имеет небольшую временную задержку, но, поскольку это занимает столько же времени, сколько обычно требуется для перехода моего компьютера в спящий режим, я бы не стал придавать этому значения). ). Я удалил этот фрагмент из своей общей программы, после чего программа отлично работает, что наводит меня на мысль, что в этом коде есть что-то, что заставляет компьютер засыпать. Кроме того, если один из флагов, управляющих циклами, сброшен, я сбрасываю эти флаги, но проблема остается. На случай, если (по какой-то странной причине) булевы операторы повлияли на это, я изменил их во всех возможных комбинациях, и это по-прежнему не работало! Я пытался добавить команду, чтобы компьютер не переходил в спящий режим, но это тоже не сработало. Какие-либо предложения? Очень признателен.

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

person Often Right    schedule 20.01.2014    source источник
comment
Вместо того, чтобы заставлять нас читать неисправный код, как насчет описания того, чего вы пытаетесь достичь здесь.   -  person Sam Axe    schedule 20.01.2014
comment
Я пытаюсь заставить компьютер перейти в спящий режим при нажатии на значок уведомления (что работает), но когда я пробуждаю компьютер, он снова засыпает, пока я все еще запускаю программу.   -  person Often Right    schedule 22.01.2014
comment
Что это за странная петля?   -  person Sam Axe    schedule 22.01.2014
comment
Кроме того, откуда вызывается ваш указанный код?   -  person Sam Axe    schedule 22.01.2014
comment
Если я правильно вас понял, цикл, о котором вы говорите, - это циклическое событие сна, которое по праву не должно происходить. Как я описал выше, компьютер постоянно переходит в спящий режим, когда я его пробуждаю: то, чего не должно происходить. Вместо этого он должен либо прервать первый цикл for, показанный выше, либо вернуться к началу этого цикла. Этот код вызывается сразу после создания формы, т.е. сразу после InitializeComponent();   -  person Often Right    schedule 23.01.2014


Ответы (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);
    }
person Ryan Newington    schedule 12.02.2014