IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web avec .NET Discussion :

Barre de progression avec pourcentage, a quoi correspond le 100% ?


Sujet :

Développement Web avec .NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Par défaut Barre de progression avec pourcentage, a quoi correspond le 100% ?
    Bonjour,

    Je tente de faire une barre d'attente lors d'un long processus et j'ai dans l'idée d'y ajouter le % d’achèvement du processus.
    Pour l’instant j'ai un bête Gif d'attente avec timer de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public partial class progressbar : System.Web.UI.Page
        {
     
            protected void Page_Load(object sender, EventArgs e)
            {
     
            }
     
            protected void btnInvoke_Click(object sender, EventArgs e)
            {
                System.Threading.Thread.Sleep(3000);
                lblText.Text = "Fin de l'analyse";
     
            }
        }
    et le script manager qui va bien.

    Ma question est très simple, pour pouvoir afficher une barre de progression il faut d'abord définir le 0% et le 100%. Mais 100% de quoi ?
    Sur un download c'est simple ce % correspond au Mo copié ou a copié. Je voulais savoir si il existais une fonction ou une méthode dans ASP.net capable de fournir le nombre d’opération effectué dans le processus ?
    Je ne connait pas le fonctionnement interne de la bête (nombre d’opération effectué, de ligne de code parcouru, d'appel a je sais pas quel process basique) ni même si ces informations sont accessible avant que le code soit parcouru une 1ere fois et je ne trouve pas grand chose sur le net (manque les bon mot clés).

    -Une fois ces info connu je pensais faire un appel régulier Ajax a la methode entrain d'être parcouru afin d'afficher le % de progression du processus.

    Si vous avez une autre méthode, voir un tuto pour ce genre de chose je prend aussi

    merci de votre aide.

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Salut,

    il faut pouvoir dénombrer les opérations censées faire avancer ta barre de progression, ensuite tu normalises le nombre d'opérations déjà faites (en divisant par le max trouvé précédemment) pour obtenir un pourcentage. A ma connaissance il n'existe pas de méthode "magique" pour que la CLR trouve tout seul où en est l'avancement d'un bout de code.

    Si on parle toujours de ta fonction de comparaison de liste tu devrais avoir un nombre d'opérations égale à la somme des nombres entiers de 1 à n-1, n étant le nombre total de listes que tu as à comparer. Explication : tu vas comparer ta première liste au n-1 autres listes, puis ta deuxième liste à n-2 listes, puis la 3ème à n-3 listes ... puis la n-1ème liste à une seule liste, la dernière.

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Par défaut
    je suis demasqué

    Effectivement il y'a la comparaison de liste mais vraiment, vraiment, vraiment pas que ça La comparaison est une méthode de vérification parmi d'autre et le processus couvre de nombreuses méthodes avec des connexion en base, etc...

    Dans l'idée j'ai besoin d'un compteur qui part du moment ou je clic sur le bouton dans ma page, jusqu’à la fin du processus. Je recherche donc quelques chose sur une couche plus profonde mais je ne sais pas quoi. Nombre de cycle d'horloge, nombre d'appel a une fonction primitive, allocation mémoire, bref n'importe quoi qui me permet de quantifier un nombre d’opération effectué entre le clic et l'attente du nouveau clic.

    Je me suis dit que comme on est sur du code compiler peut être que certaine informations non visible habituellement sont disponible quelques part et qu'il est possible de les exploiter. Un peu comme les "valeurs de la métrique du code".

    On peut obtenir le nombre de ligne de code dans un processus par exemple ? Je ne trouve pas sur le net un appel ou une méthode pour l'afficher. Même si le nombre de ligne de code est pas un bon indicateur en terme de proportionnalité entre 2 valeurs du % de progression, la vitesse de progression de la barre n'a pas à être constante. Si ça bloque a 16% pendant 30sec parce que cette ligne est longue a traiter et qu'ensuite de 16% a 100% ça met 3 sec sa me gène pas. Je recherche plus un moyen de montrer la progression d'un processus et son état d'avancement qu'a faire une estimation du temps que sa va prendre.

    Voila c'est peut être une question un peu tordu je continue ma recherche

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par défaut
    Quand bien même le code passe par une "moulinette" (qui n'est pas une vraie compilation, n'oublions pas que les langages .NET sont interprétés) il ne peut pas pour autant déterminer la longueur d'un traitement. Imagine simplement une boucle for allant de 0 à n, avec n déterminé par une valeur en DB : d'un appel à l'autre ce n peut varier alors que le code derrière ne bouge pas, le dénombrement est donc impossible en automatique.

    Pour ce qui est du nombre de lignes de code il existe une macro en C qui fait ça, en C# tu dois pouvoir trouver un ersat via la classe StackTrace ou les Caller Information, mais je pense pas qu'il faille creuser de ce côté là, tu auras toujours le souci de dénombrement.

    Si ton process contient plusieurs traitements alors tu pourrais prendre leur nombre comme max. Tu aurais un avancement par "à-coups" mais au moins il serait simple à mettre en place.

    Pour finir : quoi que tu trouves pour quantifier l'avancement (cycle, fonctions primitives ...) il faudra toujours savoir par avance combien tu es censé en obtenir au final, sinon tu seras dans l'incapacité de déterminer un pourcentage.

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Par défaut
    "Si ton process contient plusieurs traitements alors tu pourrais prendre leur nombre comme max"

    Oui ça me va très bien! Il doit bien y en avoir une dizaine. Et c'est toujours plus sympas q'une animation infinie qui ne laisse même pas l'espoir qu'il se passe quelque chose
    Le nombre de ligne de code dans le cas d'une boucle n'est pas intéressant c'est vrai j 'y avais pas penser... En revanche le nombre d'appel aux méthode ou au fonction résous ce problème.

    Je vais creuser dans cette direction.

    Merci

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2015
    Messages : 98
    Par défaut
    Bonjour, je suis parti dans l'affichage des contrôles sur une page web et une barre de chargement bootstrap.

    voici la partie affichage des controles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    public partial class progressbar : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
            }
     
            protected void report_start_Click(object sender, EventArgs e)
            {
                System.Threading.Thread.Sleep(1000);
               lblText.Text = "Fin de l'analyse";
     
            }
            private void AfficheArbre(ControlCollection controls, int profondeur)
            {
                foreach (System.Web.UI.Control control in controls)
                {
                    Response.Write(new String('-', profondeur * 6) + " > ");
                    Response.Write(control.GetType() + " - <b>" + control.ID + "</b><br />");
                    if (control.Controls != null)
                    {
                        AfficheArbre(control.Controls, profondeur + 1);
                    }
                }
            }
     
            protected override void OnPreRender(EventArgs e)
            {
                AfficheArbre(Page.Controls, 2);
                base.OnPreRender(e);
            }
     
     
        }
    }
    Et le petit script pour le bootstrap dans la page aspx:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    <body>
        <form id="form1" runat="server">
     
     <asp:TextBox runat = "server" ID="Letextboxstat" Text="Une valeur ..." />
     
         <div class="container">
     
               <asp:Label ID="lblText" runat="server" Text=""></asp:Label>
     
             <h3>barre de progression bootstrap avec %</h3>
                    <div id="reportbars">
    		            <div class="auto-style1">
    			                <div class="progress-bar" id="tracking" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 0%;transition-duration: 1s;">
                                    <span style="visibility: hidden">xxxx</span>
                                    <div>
    	                                <div id="progressbar">
    	                                    </div>
    	                                      <span data-bind="text: formattedPercent()" class="pull-right badge"></span>
                                            </div>
     
    			                </div>
                       </div>
                  </div>
                 <asp:button ID="report_start" runat="server" Text="Start" class="btn btn-default" onclick="report_start_Click"/>
     
     
             <script type="text/javascript">
                            $("#report_start").click(function () {
                            $("#reportbars").append('<span style="visibility:hidden">Laufendes Tracking 950.325</span>' +
                                        '</div></div>');
     
                            $("#tracking").css("width", "100%");
                            setTimeout(function () { $("#tracking1").css("width", "100%"); }, 10)                        
     
                            });
         </script>
                </div>
        </form>            
    </body>
    C'est une barre de progression qui s'enclenche au clic bouton pour une période de 1 sec. L’idéal serait de la coupler au controle ( au momant du pre rendu, de leur generation, de leur affichage ? j'en sais rien a vrai dire) plutot qu'a un timer de 1sec....

    C'est chaud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PowerShell] Barre de progression avec l'utilisation d'une cmdlet
    Par arnaudperfect dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 15/04/2015, 14h24
  2. BARRE DE PROGRESSION AVEC CODE PL/sql
    Par Bayoro dans le forum PL/SQL
    Réponses: 1
    Dernier message: 19/10/2007, 14h58
  3. Créer une barre de progression avec "stop/pause"
    Par davos56 dans le forum Delphi
    Réponses: 7
    Dernier message: 22/05/2007, 17h59
  4. Réponses: 3
    Dernier message: 22/06/2006, 17h39
  5. [VB.NET] Pb avec le bouton Annuler d'1 barre de progression
    Par dada1982 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/06/2004, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo