Вы пытаетесь сделать многопоточность на сервере? Что бы я порекомендовал, в вашем клиентском 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. Мой сервис проверки завершенности просто возвращает значение флага.