powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebForms Timer повторные вызовы
1 сообщений из 1, страница 1 из 1
WebForms Timer повторные вызовы
    #39968824
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!

Сделал проект на WebForms, работает всё как нужно, кроме одного: при отладке проскочил один бажок.

1) Добавляем таймер на страницу и выключаем его
Код: plaintext
1.
<asp:Timer ID="Timer1" runat="server" Interval="2000" Enabled="False"></asp:Timer>



2) При нажатии на кнопку, запоминаем в сессии объект с которым сейчас работаем и включаем таймер
Код: vbnet
1.
2.
Session("work") = 1
Timer1.Enabled = True



3) На странице процедура таймера выглядит примерно так. Если событие отработало, проверяем, что действительно нам передали задание, тогда выполняем некий запрос в базу (достаточно быстрый). Через секунд 5-30 (около 5 событий/повторов таймера) мы получим результат и тогда очистим объект в сессии и выключим таймер, а пользователю отобразим результат

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
	If Session("work") IsNot Nothing Then

		' Полезная нагрузка здесь
		Threading.Thread.Sleep(500)
		Label1.Text = "Some Result " & (New Random).Next()

		Session("work") = Nothing
		Timer1.Enabled = False
	End If
End Sub



Такой кейс работает хорошо, когда запрос выполняется быстро (меньше размера интервала таймера). Если же интервал выставить в 1 секунду в моём проекте (изменим в примере на Sleep(5000)), тогда произойдёт следующее: будет вызвана загрузка страницы, браузер ждёт, код в странице пытается задизеблить таймер и вернуть страницу браузеру. Но со стороны браузера, видимо JS (тот который таймер) формирует очередь из вызовов, и получается после загрузки страницы в браузере, вызывается опять событие таймера (приходит на страницу VIEWSTATE где таймер включен) и эта балалайка теперь периодически обновляет страницу. Из-за этого результат который был показан на прошлом шаге, мы очистили, думая что пришло новое задание от пользователя.

Как этого избежать? Даже так: как заставить таймер выполнить 1 раз постбек на сервер и ждать пока браузеу вернётся страница?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebForms Timer повторные вызовы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]