|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.08.2012, 15:32 | #1 |
Форумчанин
Регистрация: 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. Прототип работает. Тем не менее хотелось бы знать - может я 'изобрёл велосипед' и всё можно сделать гораздо проще? |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |