Mensagem do visor de carga, enquanto a exportação de um conjunto de resultados para o Excel
-
22-08-2019 - |
Pergunta
Eu estou usando ASP.NET e C # e estou exportando muito grandes conjunto de resultados para o Excel. Enquanto o meu código de exportação está sendo executado eu gostaria de mostrar um "carregamento" gif animado para que os usuários vão saber o seu pedido está a processar. Eu tenho tentado fazer isso com multithreading, mas eu não estou muito familiarizado com ele. Alguém pode me orientar na direção certa? Obrigado!
Jon
Solução
Você está tentando fazer multi-threading no servidor? O que eu recomendo é a sua vez javascript do lado do cliente em uma mensagem de espera por favor antes de postar para o servidor. Em seguida, no lado do cliente quando sua postagem feito, você transformar a mensagem off.
Sem saber mais sobre a sua configuração real Eu não posso ajudar muito mais longe, mas última vez implementado este eu fiz algo ao longo destas linhas:
Suponha que tenhamos uma div chamada PrintLoadingPanel usando jQuery eu definir o div para exibir e assumir a janela:
$("#printLoadingPanel")
.css({display:"block",top:"0px",left:"0px",height:screen.availHeight});
Em seguida, será iniciado um temporizador com um segundo intervalo 1/2, que vai começar a verificar se estamos a fazer a impressão. Estou apenas gerar e fazer o download PDF de pequeno, então eu precisava de uma resposta mais rápida. Se o seu relatório é realmente lento que você pode querer ajustar o seguinte:
window.setTimeout(checkIfDoneDownload,500);
Em seguida, minha função CheckIfDoneDownload atinge o servidor e verifica se acabados gerar o arquivo e download. Eu estou usando jQuery aqui novamente para chamar um AJAX habilitado serviço WCF. Você poderia substituir isso com PageMethods ou qualquer outra forma de retorno de chamada para o servidor.
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();}
}
});
}
Agora, no lado do servidor, eu estou gerando meus downloads via um manipulador de HTTP. Essencialmente, a primeira coisa que faz é definir um sinalizador nível de sessão para falsa, então a última coisa que ele faz é configurá-lo de volta à realidade. Meu check se feito serviço apenas retorna o valor da bandeira.
Outras dicas
Eu executar para esse mesmo problema com a geração de relatórios. Uma solução simples seria para executar o relatório durante a noite e, em seguida, escrevê-lo para o servidor. Em seguida, fornecer um link para o relatório.
Se você estiver em uma posição para usar ASP.NET AJAX, então eu recomendo usar o UpdateProgress
controlo (juntamente com um UpdatePanel
).
Se você é depois de imagem GIF uma boa animada então confira Ajaxload .