Запрос к базе данных и обратный отсчет с Ajax в ASP.Net ~ Трудная проблема - PullRequest
0 голосов
/ 18 ноября 2009

Я спрашивал несколько раз, но должен спросить снова, потому что я не знаю, что делать: На моей странице есть система аукциона.

Каждую секунду я должен:

  • Получить информацию, если какая-либо заявка на покупку -> Запрос к базе данных
  • Таймер обратного отсчета минус 1 секунда
  • Обновите несколько панелей с информацией, если есть новый претендент (история показывается, бла)

Моя (забавная) проблема заключается в том, что в панели обновлений только с меткой-таймером и обратным отсчетом этого времени необходим только простой Ajax-таймер ASP.Net (который мне нужен, я думаю, потому что мне нужен DAL и т. более 1 секунды ...

Это означает, что когда я запускаю таймер, который только преобразует метку в DateTime, удаляет 1 секунду и обновляет метку, через 10 обычных секунд он не запускается 10 раз, только 8 раз.

Итак, через 10 секунд я теряю 2 секунды ...

Я не хочу отображать изображения, когда начинаю запрашивать базу данных внутри ....

Что делать?


Я обнаружил, что это не спектакль, который слишком медленный. Таймер не запускается каждую секунду.

Я заполнил Debug.Writeline с миллисекундным началом и окончанием таймера, вот 3 примера:

  • 2009.11.18 13: 13: 21: 1821
  • 2009.11.18 13: 13: 21: 1821
  • 2009.11.18 13: 13: 22: 7021
  • 2009.11.18 13: 13: 22: 7021
  • 2009.11.18 13: 13: 24: 2421
  • 2009.11.18 13: 13: 24: 2421

Таким образом, он заканчивается в миллисекундах, но начинается снова не в правильном интервале (должно быть 1000 миллисекунд!)


По желанию код:

      protected void Timer1_Tick(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss:ffff"));
        DateTime dt = DateTime.Parse(lblTimer.Text);
        dt = dt.AddSeconds(-1.0);
        lblTimer.Text = dt.ToString("HH:mm:ss");
        System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss:ffff"));
    }

2)

                            <asp:UpdatePanel ID="up1" UpdateMode="Conditional" runat="server">
<ContentTemplate>
    <asp:Timer ID="timeAD" Interval="1000" Enabled="true" runat="server" ontick="Timer1_Tick">
</asp:Timer>
<asp:Label ID="lblTimer" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>

1 Ответ

1 голос
/ 19 ноября 2009

Теперь я знаю ответ: Таймер находится на панели обновлений, поэтому будет добавлено 300-миллисекундное время простоя, поскольку таймер перезапускается при каждой воображаемой обратной передаче.

Уберите таймер с панели обновлений и получите триггер на панели -> Win. Таймер срабатывает каждые 1 секунду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...