begin process at 2012 02 14 04:25:12
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

ASP.Net

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

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


 Information sur le tutoriel

Note :
Aucune 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.

 Historique

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

Commentaires

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

Commentaire de ecureuilmasque le 04/06/2008 10:44:06

La même source en vb c'est possible ?

Ce bout de code me serait bien utile.
Merci

Commentaire de nassar208 le 15/07/2008 19:39:04

Je suis vraiment intéressé pour ce sujet, et j'ai déjà le poser dans le Forum (http://www.aspfr.com/infomsg_TRAITEMENT-LOURD-CSHARP-ASP-NET_1157716.aspx) mais je n'ai pas reçue une explication satisfaisant.

Ma question c'est le même que ECUREUILMASQUE : est ce qu'on peut faire sans faire de javascript , mais par du code C# ou VB

je veut utilisé ça dans les reporting dont le traitement et coûteuse si je veut le faire en SQLServer et je ne veut pas que le navigateur du client reste bloqué..

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,094 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales