Member 12630374 Ответов: 1

Как я могу предотвратить пропуск таймера ASP.NET проект, когда несколько пользователей входят в систему одновременно?


Радуйся..

Моя проблема в том, что я использую таймер в своем asp.net сайт онлайн-экзамена .
один пользователь войти в систему, чтобы попытаться проверить мой таймер уменьшения значения времени работать как хорошо, но несколько пользователей пытались проверить, что время мой таймер пропускает тики и его идет очень быстро ..я не знаю, в чем причина, пожалуйста, помогите мне..

заранее благодарю вас ...
Мой код. cs-это

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

protected void timer1_tick(object sender, EventArgs e)
        {
            
            if (TimeAllSecondes > 0)
            {
                TimeAllSecondes = TimeAllSecondes - 1;
                if (TimeAllSecondes < 0)
                {
                    Session["endtime"] = DateTime.Now;
                    //Session["SubjectID3"] = txtsubid.Value;
                    //Session["SubjectName3"] = txtsubname.Value;
                    mcqmethod.update_astatus(Convert.ToString(Session["empid"]), Convert.ToInt32(Session["EXAMID"]));
                    Response.Redirect("~/MCQ/students/s_thankyou.aspx");
                  
                }
            }

            TimeSpan time_Span = TimeSpan.FromSeconds(TimeAllSecondes);
            hh = time_Span.Hours;
            mm = time_Span.Minutes;
            ss = time_Span.Seconds;
            lblTimer.Text = " Your exam time is remaining :  " + hh + ":" + mm + ":" + ss + "[H:M:S]";
         

        }

 <asp:Timer ID="timer1" runat="server" Interval="1000" OnTick="timer1_tick" ></asp:Timer>

1 Ответов

Рейтинг:
5

OriginalGriff

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

Вместо этого получите фактическое время (с вашего сервера) в начале экзамена и добавьте к нему продолжительность экзамена. Каждый раз, когда вам нужно проверить, закончилось ли разрешенное время, снова получите время с сервера и сравните его. Если Новое время прошло по времени "окончания экзамена", экзамен окончен.
Аналогично, чтобы отобразить "у вас осталось x минут", вычтите текущее серверное время из времени "окончания экзамена" и отобразите оставшуюся продолжительность из этого времени.