Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > ASP.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2012, 15:32   #1
Glen
Форумчанин
 
Аватар для Glen
 
Регистрация: 09.02.2011
Сообщений: 150
По умолчанию Progress Indicator с динамическим обновлением

У меня есть ASP.NET WebForms приложение (с использованием DevExpress v 10.2).
Там у меня возникла такая задача: прив ыполнении некоей длительной (на стороне сервера) операции показывать Progress Indicator С ПРОМЕЖУТОЧНЫМИ СОСТОЯНИЯМИ. То есть;
- пользователь нажимает кнопку Start;
- на экране у него возникает некий индикатор показывающий степень завершения операции: 1%, 5%, ...., 100%. Этот индикатор обновляется достаточно часто - скажем, каждые 3 сек - и показывает как продвинулась эта операция.

Я не нашёл ни в ASP.NET WebForms Controls ни в DevExpress какого-то компонента который полностью решает эту задачу. Поэтому придумал следующее:

1. На странице завожу Progress Indicator в виде например DX-комонента ASPxProgressBar. Он помещён в панель ASPxCallbackPanel (думаю можно иcпользовать и стандартный AJAX UpdatePanel, просто я привык к DX).
2. При нажатии на кнопку Start мой JavaScript выполняет PerformCallback('Start') для этой панели ASPxCallbackPanel
3. На сервере обработчик этой ASPxCallbackPanel принимает callback с этим параметром 'Start' и запускает мою серверную 'длинную' операцию в отдельном потоке.
4. Внутри этой же ASPxCallbackPanel существует скрытое поле HiddenField. Через него сервер сообщает клиенту что операция закончена - скажем, поставив ему значение 'Completed'.
5. На клиентской стороне есть JavaScript-обработчик события EndCallback в панели ASPxCallbackPanel. Этот обработчик работает так: если он видит что HiddenField=='Completed', то просто завершается. Иначе - ждёт три секунды и выдаёт ASPxCallbackPanel.PerformCallback(' Update')
6. Серверный обработчик панели ASPxCallbackPanel, видя на входе аргумент 'Update', смотрит - как далеко продвинулся прогресс задачи (работающей в отдельном потоке, как было сказано). Если она уже закончена, выставляет HiddenField='Completed'. Если ещё нет, вычисляет её прогресс в процентах и устанавливает этот процент в тот контрол ASPxProgressBar.

Прототип работает. Тем не менее хотелось бы знать - может я 'изобрёл велосипед' и всё можно сделать гораздо проще?
Glen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Progress Bar Trizael Компоненты Delphi 3 07.12.2010 01:25
Gauge и Progress zih Общие вопросы Delphi 9 23.10.2010 23:28
Hamster indicator - индикатор заполненности дисков Alex Cones Софт 0 16.10.2010 18:09
Camel indicator Alex Cones Софт 4 16.10.2010 10:50
проблема с динамическим обновлением. Delphi Pang Помощь студентам 5 22.02.2008 11:12