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

C# Discussion :

ProgressBar qui me fait la peau. (literalement)


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut ProgressBar qui me fait la peau. (literalement)
    Sérieusement, la conception de tout le programme qui est , a mon niveau assez conséquent m'a pris moins de temps que cette foutus progressBar.

    J'ai lu plein de tutos la dessus en anglais,en anglais indien, en allemand et puis un peu ici.
    Rien ne marche, personne ne sait comment la faire marcher

    Alors je vais bien décrire mon probleme espérant me lever demain matin et trouver une réponse venant d'un pro , un vrai, pcq y'en a qu'ici.

    Voila mon bout de code
    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
           public Patch(string IDZ, string INDEXZ, string COMEN)
            {
                
                int a = 0, b= 0; string c;
                a = int.Parse(FILEIO.Patch_Params[0]); //ID Set ok!
                if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "server") b = 0;
                else if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "images") b = 1;
                else if (FILEIO.Patch_Params[1].ToString().ToLower().Trim() == "sprite") b = 2;
    
                //Index Set OK!
                c = FILEIO.Patch_Params[2];
                PatchIt(b);
                LogItin(a,LogIt(a,c));
                          
           }
    
            static void PatchIt(int index) //Constructor
           {
               //Stored ID for log entry.
               //Starting index treatement.
               String filename = null;
               switch (index)
               {
                   case 0: { filename = "server.bin"; break; }
                   case 1: { filename = "images.bin"; break; }
                   case 2: { filename = "sprite.bin"; break; }
               }
               WebClient dlfile = new WebClient();
               Uri url = new Uri("http://valiantro.com/vpatch/" + filename);
               dlfile.DownloadFileAsync(url, Application.StartupPath + @"\grf\" + filename);
                
           }
    En Rouge & Gras, le fameux telechargement que j'aimerais joindre avec la progress Bar1

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Et qu'est ce qui ne marche pas ? Je ne vois aucun code pour afficher une quelconque ProgressBar dans le code fourni. Bien entendu, si tu n'écris pas le code, ça ne risque pas de fonctionner...

    WebClient possède un événement DownloadProgressChanged. Il faut s'abonner à cet événement qui sera lancé par WebClient chaque fois que le download de ton fichier avance. Comme ton download est asynchrone, il ne s'effectue pas dans le même thread que celui de l'interface graphique : il va doinc falloir utiliser des Invoke pour que le code du gestionnaire communique avec le ProgressBar.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    WebClient possède un événement DownloadProgressChanged. Il faut s'abonner à cet événement qui sera lancé par WebClient chaque fois que le download de ton fichier avance. Comme ton download est asynchrone, il ne s'effectue pas dans le même thread que celui de l'interface graphique : il va doinc falloir utiliser des Invoke pour que le code du gestionnaire communique avec le ProgressBar.
    D'accord avec cette solution, sauf pour la partie en gras. L'évènement DownloadProgressChanged est déclenché sur le thread qui a appelé DownloadFileAsync (de la même façon que l'évènement BackgroundWorker.ProgressChanged). Donc inutile d'utiliser Invoke si le téléchargement a été lancé sur le thread de l'UI

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 192
    Par défaut
    j'y arrive toujours pas, j'ai du bien détruire mon code dans tous ces essaies, heureusement que j'ai tout planqué sur SVN.
    Voila le code, si quelqu'un arrive a faire marché la barre de progrés avec le telechargement rouge, chapeau !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        class FileDownloader
        {
           public FileDownloader(string file)
            {
                WebClient dlfile = new WebClient();
                if(!Directory.Exists(Application.StartupPath + "\\grf")) Directory.CreateDirectory(Application.StartupPath + "\\grf");
                Uri url = new Uri("http://valiantro.com/vpatch/" + file);
                dlfile.DownloadFile(url, Application.StartupPath + @"\grf\" + file);
        /*        dlfile.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Form1.dlfile_DownloadProgressChanged);
                dlfile.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(Form1.dlfile_DownloadFileCompleted); 
            */       
          }
    
        }
    La barre est dans la forme

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    tu pourrais dire ce que tu appelles par "ca ne marche pas". c'est son affichage? l'event qui se déclenche pas? autre?

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    bon je suis royal, voici ton code où j'ai changé une seule ligne (l'antéantépénultième)
    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
     private void button1_Click(object sender, EventArgs e)
            {
                txtURL.Text = "http://tahe.ftp-developpez.com/fichiers-archive/";
                string filename = "vbnet.pdf";
                WebClient dlfile = new WebClient();
     
                dlfile.DownloadProgressChanged += new DownloadProgressChangedEventHandler(dlfile_DownloadProgressChanged);
                dlfile.DownloadFileCompleted += new AsyncCompletedEventHandler(dlfile_DownloadFileCompleted);
                dlfile.DownloadFileAsync(new Uri(String.Format("{0}{1}",txtURL.Text,filename)), Application.StartupPath + filename);
            }
     
            void dlfile_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
            {
                progressBar1.Visible = false;
            }
     
            void dlfile_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
            {
                int percent = (int)((float)e.BytesReceived/(float)e.TotalBytesToReceive*100);
                progressBar1.Value = percent;
            }
    pour info, la forme contient ceci
    Une textbox (dont j'aurais pu me passer ), un bouton, une progressbar et aucune propriété n'a été touchée. ton problème venant probablement du fait que tu faisais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.BytesReceived/e.TotalBytesToReceive
    ce qui vaudra toujours zéro car ce sont des long et donc le résultat de la division se fait avec perte de données: tout ce qui se trouve après zéro est jeté et comme forcément c'est entre 0 et 1 et bah ta progressbar ne bouge pas car percent vaudra toujours zéro. j'ai bon?

    ps: faudra aussi me dire pourquoi tu appeles DownloadAsync AVANT d'attacher tes événements Changed et Downloaded

    tu peux m'appeler dieu si tu veux

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

Discussions similaires

  1. Thème qui a fait planter WinXP Pro
    Par lechewal dans le forum Windows XP
    Réponses: 2
    Dernier message: 13/02/2006, 09h23
  2. JVGradientProgressbar : ProgressBar qui tourne en continue
    Par kivoch dans le forum Composants VCL
    Réponses: 9
    Dernier message: 11/12/2005, 12h25
  3. [debutant]programme qui ne fait rien.
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 04/12/2005, 22h19
  4. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25
  5. fonction qui en fait planter une autre
    Par ickis dans le forum C
    Réponses: 5
    Dernier message: 18/08/2003, 21h33

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