begin process at 2008 05 17 08:09:45
1 173 922 membres
53 nouveaux aujourd'hui
13 973 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP.NET : TESTER L'AVANCEMENT D'UN TRAITEMENT SERVEUR DEPUIS LE CLIENT


Information sur le tutorial

Catégorie :ASP.Net Tutorial .NET ( DotNet ) Date de création : 28/03/2007 11:25:50 Vu : 3 636 fois

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

Ce code permet de tester l'avancement d'un traitement serveur coûteux en temps. Il affiche en pourcentage au poste client l'avancement du traitement.

Tutorial

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 <DIV> qu'il va envoyer au client grâce à l'instruction Response.Flush()
Response.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 <div> 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("<div id='mydiv' >");
   Response.Write("_");
   Response.Write("</div>");
   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("<div  style='display:none'></div>");
     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.

28 mars 2007 11:47:05 :
remise en forme du code
29 mars 2007 10:23:09 :
Rajout d'une accolade.
29 mars 2007 10:26:34 :
modfication forme
  • signaler à un administrateur
    Commentaire de SuperBouly le 30/09/2007 09:33:01

    bonjour,
    L'astucee est trés jolie.
    J'ai essayé de l'adapter à un autre cas: Un userControl asp.net contenant une Iframe chargée d'un flux pdf qui prend un certain temps à charger.
    Je ne parviens pas à effacer le message 'Traitement effectué :'. Je ne parviens pas à positionner l'appel :
    <script>
       HideWait();
    </script>
    Soit le script s'exécute immédiatement et rien n'apparait (position dans l'userControl), soit le navigateur ne trouve pas l'objet HideWait() (position dans la page).
    joli code quand même

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS