Asp.net : tester l'avancement d'un traitement serveur depuis le client

hello, voila un code que j'ai eu à implémenter pour faire patienter un poste client lors d'un traitement serveur relativement long.

Principe général

durant l’exécution d'un traitement coûteux en temps, le serveur va générer des balises
qu’il va envoyer au client grâce à l’instruction Response.Flush()

Flush() sert à vider et envoyer le contenu du tampon de sortie au client.

Une  fonction javascript implémentée au niveau client va se servir du nombre de
généré pour connaître l’avancement du traitement serveur.
Le code javascript est généré lui aussi depuis le code behind.
 
 
// code behind

using System.Threading;

private string * tab = new string []{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"};

private void Page_Load(object sender, System.EventArgs e)
  {
   Response.Write("
");
   Response.Write("_");
   Response.Write("
");
   Response.Write("<script>mydiv.innerText = '';</script>");
   Response.Write("<script language=javascript>");
   Response.Write("function ShowWait(){");
   Response.Write("mydiv.innerText = 'Traitement effectué : ';");
// on recupere le nombre de div généré sur le poste client et on affiche en pourcentage l'avancement du traitement
// serveur, cette ligne est à adapter suivant ce que l'on veut afficher.
   Response.Write("mydiv.innerText +=  parseInt(parseInt(document.getElementsByTagName(\"div\").length-1)/"+ tab.Length + "*100);");
   Response.Write("mydiv.innerText += ' %';}");
   Response.Write("function StartShowWait(){mydiv.style.visibility = 'visible'; window.setInterval('ShowWait()',1000);}");
   Response.Write("function HideWait(){mydiv.style.visibility = 'hidden';window.clearInterval();}");
   Response.Write("StartShowWait();</script>");
   Response.Flush();
   
   traitementGourmand();

  }
  
  private void traitementGourmand()
  {
 
   for (int i = 0;i<tab.Length;i++)
   {    
     // on positionne les div àl'endroit ou l'on veut "flagger" l'avancement du traitementserveur
     Response.Write("

");
     Response.Flush();
           // simule un traitement long              
     Thread.Sleep(1000);
   }
   Response.Write("fin traitement");
  }
 
Code client
 
A coller dans la balise head. Cette fonction permet d'effacer l'affichage de l'avancement du traitement serveur une fois que ce dernier est réalisé.
 
<script>
   HideWait();
</script>

Voila j'espère avoir été suffisamment clair.

Adresse d'origine

A voir également
Ce document intitulé « Asp.net : tester l'avancement d'un traitement serveur depuis le client » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous