Отображать сообщение о загрузке при экспорте набора результатов в Excel - PullRequest
0 голосов
/ 06 февраля 2009

Я использую ASP.NET и C # и экспортирую очень большой набор результатов в Excel. Пока мой код экспорта работает, я хотел бы показать «загрузочный» анимированный GIF-файл, чтобы пользователи знали, что их запрос обрабатывается. Я пытался сделать это с многопоточностью, но я не очень знаком с этим. Кто-нибудь может направить меня в правильном направлении? Спасибо!

Jon

Ответы [ 3 ]

1 голос
/ 06 февраля 2009

Вы пытаетесь сделать многопоточность на сервере? Что бы я порекомендовал, в вашем клиентском JavaScript включите, пожалуйста, подождите, прежде чем отправлять на сервер. Затем на стороне клиента, когда вы закончили публикацию, вы отключите сообщение.

Не зная больше о вашей реальной настройке, я не могу больше помочь, но в прошлый раз, когда я реализовал это, я сделал что-то вроде этого:

Предположим, у нас есть div с именем PrintLoadingPanel, использующий JQUERY. Я устанавливаю div для отображения и открываю окно:

    $("#printLoadingPanel")
       .css({display:"block",top:"0px",left:"0px",height:screen.availHeight});

Затем я включу таймер с интервалом 1/2 секунды, который начнет проверять, закончили ли мы печать. Я генерирую и загружаю только небольшие PDF-файлы, поэтому мне нужен был более быстрый ответ. Если ваш отчет очень медленный, вы можете настроить его следующим образом:

    window.setTimeout(checkIfDoneDownload,500);

Затем моя функция CheckIfDoneDownload попадает на сервер и проверяет, закончили ли мы создание файла и загрузили его. Я снова использую JQUERY для вызова службы WCF с поддержкой AJAX. Вы можете заменить это PageMethods или любым другим способом обратного вызова на сервер.

function checkIfDoneDownload()
{

$.ajax({
  type: "POST",
  url: "../Services/Utilities.svc/IsPrintDownloadDone",
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
  if (msg.d)
  {
    $("#printLoadingPanel").css("display","none");
  }
  else  {window.setTimeout(checkIfDoneDownload,500);}
  },  
  error: function (xhr, textStatus, errorThrown) {
  if (xhr.status==12030) {checkIfDoneDownload();}
}
});
}

Теперь на стороне сервера я генерирую свои загрузки через HTTP-обработчик. По сути, первое, что он делает - устанавливает флаг уровня сеанса в значение false, затем последнее, что он делает, - устанавливает его обратно в значение true. Мой сервис проверки завершенности просто возвращает значение флага.

0 голосов
/ 06 февраля 2009

Если вы можете использовать ASP.NET AJAX, я бы рекомендовал использовать элемент управления UpdateProgress (вместе с UpdatePanel).

Если вы ищете хорошее анимированное GIF-изображение, посмотрите Ajaxload .

0 голосов
/ 06 февраля 2009

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

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