Question

J'utilise ASP.NET et C # et je l'exportation d'un très grand ensemble des résultats vers Excel. Alors que mon code d'exportation est en cours d'exécution, je voudrais montrer une animation « chargement » gif afin que les utilisateurs sachent leur demande est en cours de traitement. J'ai essayé de le faire avec multithreading, mais je ne suis pas très familier avec elle. Quelqu'un peut-il me guider dans la bonne direction? Merci!

Jon

Était-ce utile?

La solution

Vous essayez de faire le multi-threading sur le serveur? Ce que je vous recommande est dans votre côté client javascript activer un s'il vous plaît attendre un message avant de poster sur le serveur. Ensuite, sur le côté client lorsque vous avez terminé l'affichage vous mettez le message hors tension.

Sans en savoir plus sur votre configuration réelle, je ne peux pas aider beaucoup plus loin, mais la dernière fois que je mis en œuvre ce que je fait quelque chose le long de ces lignes:

Supposons que nous avons un div appelé PrintLoadingPanel utilisant JQUERY J'ai mis la div pour afficher et prendre en charge la fenêtre:

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

Je vais alors commencer une minuterie avec un second intervalle 1/2 qui commencer à vérifier si nous avons terminé l'impression. Je ne générer et le téléchargement de petites PDF est si je avais besoin d'une réponse plus rapide. Si votre rapport est vraiment lent, vous pouvez modifier ceci:

    window.setTimeout(checkIfDoneDownload,500);

Alors ma fonction CheckIfDoneDownload frappe le serveur et vérifie si nous avons terminé la génération du fichier et téléchargé. J'utilise JQUERY ici à nouveau pour appeler un service WCF AJAX activé. Vous pouvez remplacer cela avec PageMethods ou tout autre moyen de rappel pour le serveur.

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();}
}
});
}

du côté du serveur, je générer mes téléchargements via un gestionnaire HTTP. Essentiellement, la première chose qu'il fait est défini un indicateur de niveau de la session false, la dernière chose qu'il fait est réglé de nouveau à vrai. Mon chèque si le service fait retourne juste la valeur du drapeau.

Autres conseils

Je l'ai rencontré ce même problème avec la génération de rapports. Une solution simple serait d'exécuter le rapport la nuit puis écrire sur le serveur. Indiquez ensuite un lien vers le rapport.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top