Проблема с таймером в AJAX asp.net - PullRequest
0 голосов
/ 17 марта 2011

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

asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:Label ID="lblHour" Text="" runat="server"></asp:Label>
        <asp:Label ID="lblMin" Text="" runat="server"></asp:Label>
        <asp:Label ID="lblSec" Text="" runat="server"></asp:Label>
        <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="timer_Tick">
        </asp:Timer>

    </ContentTemplate>


    </asp:UpdatePanel>

Код позади

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["time"] = DateTime.Now.AddSeconds(40);
    }


}

protected void timer_Tick(object sender, EventArgs e)
{
    TimeSpan time1 = new TimeSpan();
    time1 = (DateTime)Session["time"] - DateTime.Now;
    if (time1.Seconds <= 0)
    {
        lblSec.Text = "TimeOut!";
    }
    else
    {
        lblSec.Text = time1.Seconds.ToString();
    }


}

Проблема, с которой я столкнулся, заключается в том, что таймер не будет уменьшаться должным образом. Начинается с 38, потом до 35, потом 32 и т. Д.

Есть ли способ решить эту проблему?

1 Ответ

1 голос
/ 17 марта 2011

Я считаю, что проблема заключается в том, что когда срабатывает таймер, время выполнения кода немного дольше одной секунды, 1 секунды + несколько микросекунд, это является причиной этого вывода. Проверьте это в своем коде.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Session["time"] = DateTime.Now.AddSeconds(40);
        }
    }

    protected void timer_Tick(object sender, EventArgs e)
    {
        var endTime = (DateTime) Session["time"];
        var endMin = ((DateTime)Session["time"]).Minute;
        var endSec = ((DateTime)Session["time"]).Second;
        var endMsec = ((DateTime)Session["time"]).Millisecond;
        var currentTime = DateTime.Now;
        var currentMin = currentTime.Minute;
        var currentSec = currentTime.Second;
        var currentMsec = currentTime.Millisecond;

        var time1 = endTime - currentTime;

        lblHour.Text = string.Format("End Sec - {0}:{1}:{2}", endMin, endSec, endMsec);
        lblMin.Text = string.Format("Current Sec - {0}:{1}:{2}", currentMin, currentSec, currentMsec);

        lblSec.Text = time1.Seconds <= 0 ? "TimeOut!" : time1.Seconds.ToString();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...