Mensagem do visor de carga, enquanto a exportação de um conjunto de resultados para o Excel

StackOverflow https://stackoverflow.com/questions/520987

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

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top