3

目が一定時間閉じられたときにイベントでタイマーを開始する必要があります。タイマーが経過すると画面がオフになります。タイマーが経過する前に目が開いた場合、タイマーは停止し、画面がオンになります。

ComputationOfTimer(); 目が開いているか閉じているかを監視します。コンソールで正しいフィードバックが得られているため、これは正常に機能しています。

            private void ComputationOfTimer()
        {
            if (blink[0] == 100)        //If eye Closed detected
            {
                ctrlTimerStop = 3;
                ctrlTimerStart = ctrlTimerStart - 1;
                System.Console.Write("\n\t Eyes Closed");                    
                timerStarting();
            }
            else                        //If eyes are open before timer is elapsed 
           //we have to stop timer
            {
                ctrlTimerStart = 5;
                ctrlTimerStop -= 1;
                //System.Console.Write("\n\t\t\t\t\t Opened");
                timerStopping();
            }
        }

timerStarting() はタイマーを開始します

            public void timerStarting()
        {
            if (ctrlTimerStart == 0)
            {

                screenOffTimer.Interval = 3000;
                screenOffTimer.Elapsed += screenOffTimer_Tick_ScreenOff;
                screenOffTimer.AutoReset=false;

                if (!screenOffTimer.Enabled)  //Starts timer only once
                {
                    screenOffTimer.Enabled = true;
                    System.Console.Write("Timer Chaloo Hai");
                }
            }
        }

画面オフとスリープのロジック

            void screenOffTimer_Tick_ScreenOff(object sender, EventArgs e)
        {
            System.Console.Write("Eyes Closed For long time bro!");
            Beep(440, 1000); // Concert A, for 1 second
            SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);

    //as eyes are still closed send pc to Sleep start one more timer

            gotoSleepTimer.Interval = 10000;
            gotoSleepTimer.Elapsed += gotoSleepTimer_Tick_SleepOff;
            gotoSleepTimer.AutoReset = false;

            if (!gotoSleepTimer.Enabled)
            {
                gotoSleepTimer.Start();
            }                

        }

        void gotoSleepTimer_Tick_SleepOff(object sender, EventArgs e)
        {
            System.Console.Write("So rahe hain bhai ab");
            Beep(440, 2000); // Concert A, for 1 second
            System.Windows.Forms.Application.SetSuspendState(PowerState.Suspend, false, false);

        }

timerStopping(); 目が早く開いた場合にタイマーを停止する

            public void timerStopping()     //To stop timer when Eyes Open
        {
            if (ctrlTimerStop == 0)
            {
                //to do timer stop logic
                if (screenOffTimer.Enabled)
                {
                    screenOffTimer.Stop();
                    System.Console.Write("Timer Band Ho Gaya");
                }
                //System.Windows.MessageBox.Show("Timer Stopped");
                SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON);

                if (gotoSleepTimer.Enabled)
                {
                    gotoSleepTimer.Stop();
                }
            }

        }

時間が経過してもタイマーが起動しません。以前にDispatcherTimerを試しましたが、それはWPF UIを更新することであり、目的が異なります。

宣言部分:

System.Timers.Timer screenOffTimer = new System.Timers.Timer();
System.Timers.Timer gotoSleepTimer = new System.Timers.Timer();
4

2 に答える 2

1

試す

EventTabTimer.Elapsed += new ElapsedEventHandler(gotoSleepTimer_Tick_SleepOff);
于 2013-08-28T13:12:58.013 に答える
0

screenOffTimer.Start()問題の添付コードを確認できませんでした。それが問題なのかもしれません

ありがとう

于 2013-08-28T12:48:10.513 に答える