Pregunta

Estoy utilizando ASP.NET y C # y estoy exportando una muy grande conjunto de resultados a Excel. Si bien mi código de exportación se está ejecutando me gustaría mostrar una "carga" gif animado por lo que los usuarios sabrán su solicitud se está procesando. He estado tratando de hacer esto con múltiples hilos, pero no estoy muy familiarizado con él. ¿Puede alguien me guíe en la dirección correcta? Gracias!

Jon

¿Fue útil?

Solución

¿Estás tratando de hacer multi-threading en el servidor? Lo que yo recomiendo es en su lado del cliente JavaScript encender un mensaje por favor espere antes de enviar al servidor. A continuación, en el lado del cliente cuando el hecho de Publicación hacer desaparecer el mensaje.

Sin saber más acerca de su configuración real no puedo evitar mucho más allá, pero la última vez que lo hizo implementado esto algo a lo largo de estas líneas:

Supongamos que tenemos un div llamado PrintLoadingPanel usando jQuery puedo configurar el div para mostrar y hacerse cargo de la ventana:

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

a continuación, iniciará un temporizador con un segundo intervalo medio que empezar a comprobar si hemos terminado la impresión. Sólo estoy generar y descargar pequeños de PDF por lo que necesitaba una respuesta más rápida. Si el informe es muy lento es posible que desee ajustar la siguiente:

    window.setTimeout(checkIfDoneDownload,500);

A continuación, mi función CheckIfDoneDownload golpea el servidor para comprobar si ha terminado de generar el archivo y lo descargó. Estoy usando jQuery aquí de nuevo para llamar a un servicio WCF AJAX. Se podría sustituir esto con PageMethods o cualquier otra forma de devolución de llamada al 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();}
}
});
}

Ahora en el lado del servidor, estoy generando mis descargas a través de un controlador HTTP. En esencia, el primero que lo hace se establece un indicador de nivel de sesión en false, entonces el último que lo hace se pone de nuevo en true. Mi cheque si el servicio hecho sólo devuelve el valor de la bandera.

Otros consejos

Me he encontrado con este mismo problema con la generación de informes. Una solución sencilla sería la de ejecutar el informe en la noche y luego escribirlo en el servidor. A continuación, proporcionar un enlace al informe.

Si está en condiciones de utilizar ASP.NET AJAX, te recomiendo utilizar el control de UpdateProgress (junto con un UpdatePanel).

Si usted es una imagen gif animado agradable después y luego salir Ajaxload .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top