Как асинхронно запустить длительную операцию и показать загрузку для пользователя в ASP.Net Ajax и опросить результат? - PullRequest
3 голосов
/ 24 марта 2011

У меня тяжелая операция, которая занимает много времени в моем приложении asp.net. Я не хочу запускать всю операцию за один запрос, что может привести к ошибке TimeOut. Вместо этого я хочу вызывать операцию в отдельном потоке и опрашивать результат каждые x секунд. Как я могу это сделать?

Если операция завершена, мне нужно зарегистрировать скрипт в обратной передаче ajax, чтобы скрыть панель загрузки и показать содержимое. Однако я не могу зарегистрировать новые сценарии и вызывать их во время обратных передач ajax.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

Опция 1

В своем коде вы можете запустить поток и получить некоторый класс, который управляет запущенными потоками.Затем вы можете иметь элемент управления в UpdatePanel, который опрашивает прогресс каждые несколько секунд.

Опция 2

Храните детали «что делать» в базе данных и имеете фоновый сервиспостоянно проверять работу, чтобы сделать.Это сделало бы работу и сообщило бы о прогрессе.У вас будет элемент управления, подобный варианту 1, который проверяет ход выполнения и обновляет пользовательский интерфейс.

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

При обратной передаче я создам поток, который запускает длительный процесс, а также регистрирует скрипт запуска клиента.Клиентский скрипт будет использовать setTimeOut, который вызывает вашу предварительно определенную функцию js для запуска первого вызова веб-сервиса в пул для обновления статуса.Если результат показывает, что он завершен, вы можете изменить видимость панели в javascript.В противном случае он по расписанию снова будет вызывать вашу функцию js через x миллисекунд с помощью вызова setTimeOut.

...