Как периодически запускать интервальное событие каждый указанный интервал времени c - PullRequest
0 голосов
/ 09 марта 2020

Я хотел создать элемент управления по промежутку времени, например, когда программа запускается, после временного интервала t1, запускается событие A (например, включается), затем ждет после временного интервала t2, запускается событие B (выключение egswitch выключено), и этот процесс будет выполняться периодически для n раз.

То, чего я достиг до сих пор, - это то, что я мог l oop два события только тогда, когда t1 = t2, я не знаю, как сделать t1 и t2 две отдельные управляемые переменные.

 public partial class Form1 : Form
    {

        private int counter; //counter to control the cycle times
        private int EventIndex;//control the event status

        private void InitializeTimer()
        {
            counter = 0;
            EventIndex = 0;
            timer1.Enabled = true; // Hook up timer's tick event handler.  
            this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
        }

        //function for switch the event status

        private void UpdateEvent()
        {
            EventIndex = 1 - EventIndex;  // loop event index between 1 and 0

            if (EventIndex.Equals(1))
            {
                //Exceute command for event A
            }
            else 
            {
                //Exceute command for event A
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            decimal t = numericUpDown1.Value; //time interval t between two events
            int interval = Convert.ToInt32(t);

            decimal n = numericUpDown2.Value; //periodically excute the process n times
            int cycle = Convert.ToInt32(n);

            //using the numeric input value to set up the interval time
            timer1.Interval = interval 


            if (counter >= cycle)  
            {
                // Exit loop code.  
                timer1.Enabled = false;
                counter = 0;

            }
            else
            {            
                UpdateEvent();
                counter = counter + 1;// Increment counter.
            }
        }
 }

Ответы [ 2 ]

0 голосов
/ 09 марта 2020

Я предлагаю вам сделать два таймера для каждого события.

timerA - это интервал t1, событие триггера A. timerB - это интервал t2, событие триггера B.

By Разделив таймер, вы не можете случайно изменить интервал таймера на неожиданные результаты.

 void UpdateEventA(){
     if( counter >= cycle ){
         timerA.Enable = false;
         return;
     }
     // A working
     timerA.Enable = false;
     timerB.Enable = true;
 }

 void UpdateEventB(){
     // B working
     timerB.Enable = falsed;
     timerA.Enable = true;
     counter ++;
 }

Однако, если у вас есть событие ABCDE и вам нужно выполнить его последовательно. Я предлагаю вам использовать один таймер и рассчитать интервал внутри одного события Tick.

0 голосов
/ 09 марта 2020

У UpdateEvent установлен интервал таймера после события:

private void UpdateEvent()
{
    if (EventIndex.Equals(1))
    {
        timer1.Interval = //delay until event B;
    }
    else 
    {
        timer1.Interval = //delay until event A;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...