Andy07 Ответов: 0

Как сделать более одного таймера обратного отсчета


Я хочу сделать более одного таймера обратного отсчета. Я использую signalr для отправки клиенту значения таймера обратного отсчета. Когда я создаю один таймер, это нормально, но когда второй таймер или более одного таймера, ТИК для обратного отсчета работает очень быстро.
Пожалуйста, помогите мне.

Что я уже пробовал:

Моя функция создания таймера:
public void Start(int id, int tick,int warningtime)
       {
           var user = users.FirstOrDefault(x=>x.ID==id);

           if(user==null)
           {
               UserGroups cluser = new UserGroups();
               if(users.Count>=1)
               {
                   multiple += 1;
               }
               else
               {
                   multiple = 1;
               }
               cluser.ID = id;
               cluser.counter = tick;
               cluser.timers = new Timer();
               if(multiple>1)
               {
                   cluser.timers.Interval = 1000 * (multiple*10*1.5);
               }
               else
               {
                   cluser.timers.Interval = 1000;
               }
               cluser.timers.Elapsed += TimerTick;
               cluser.warnTime = warningtime;
               users.Add(cluser);
               cluser.timers.Start();
           }
           else
           {
               //activated the exist timer
               if (user.counter == 0 && user.warnTime == 0 && user.ID == id)
               {
                   user.counter = tick;
                   user.timers = new Timer();
                   if (multiple > 1)
                   {
                       user.timers.Interval = 1000 * (multiple * 10 * 1.5);
                   }
                   else
                   {
                       user.timers.Interval = 1000;
                   }
                   user.timers.Elapsed += TimerTick;
                   user.warnTime = warningtime;
                   user.timers.Start();
               }
           }
       }


Мой Тиковый Таймер:
private void TimerTick(object sender, ElapsedEventArgs e)
{
    List<object> result = new List<object>();
    var context = GlobalHost.ConnectionManager.GetHubContext<TimerHub>();

    foreach(var item in users)
    {
        // kill timer automatically after 1 hour
        if(item.counter==-3600)
        {
            TimerHub Obj = new TimerHub();
            Obj.Stop(item.ID);
        }
        //broadcast just the active timer
        if(item.warnTime!=0)
        {
            item.counter--;
            bool warning = false;
            //set the timer item
            string timerResult = CalculateCountTimer(item.counter);

            if (item.counter <= item.warnTime)
            {
                warning = true;
            }
            else
            {
                warning = false;
            }
            //item for send to client
            result.Add(new
            {
                scn = item.ID,
                warning = warning,
                resultTime = timerResult,
                reset = false
            });
        }
    }
    context.Clients.All.countdown(result);

}

Gerry Schmitz

У вас там какие-то "странные" вычисления интервалов таймера; это ваша проблема.

Andy07

Расчет сделан потому, что таймеры собирались быстро, когда он создавал более одного таймера, поэтому я сделал что-то в расчете интервала.

0 Ответов