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 sur UploadFile


Sujet :

C#

  1. #1
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut ProgressBar sur UploadFile
    Bonjour,

    Je développe une application en C# qui fait de l'upload de fichiers.

    Je voudrais que pendant l'upload du fichier sur le serveur (via la méthode WebClient.UploadFile(Uri, String)) ma ProgressBar m'affiche l'état d'avancement du transfert du dit fichier.
    Cette méthode renvoie un tableau de byte.

    Mais je ne vois pas du tout comment faire

    Quelqu'un aurait une idée?

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Abonne toi à l'évenement UploadProgressChanged, et fais ce que tu as à faire avec ta progressbar. Mais du coup va falloir utiliser UploadFileAsync pour un upload asynchrone.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup pour ta réponse !

    J'ai testé un peu ce que tu m'as conseillé de faire mais je crois que je m'y prends mal

    J'ai fait ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void clientFTP_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
            {
                barreProgression.Value = Convert.ToInt32((e.BytesSent / e.TotalBytesToSend) * 100);
            }
    et ca marche pas... xD

    Edit : désolé, j'avais pas vu qu'il fallait passer en UploadFileAsync je vais tester ca tout de suite...

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ca marche pas, c'est à dire ?
    Pourquoi tu définis pas le max de ta progress bar à TotalBytesToSend et ensuite de mettre ta valeur courante à BytesSent dans l'évènement.

    Tu rentres bien dans l'évènement au moins ?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    C'est bon j'ai résolu le probleme.

    En fait, ce qui ne marchait pas, c'est la progression de la ProgressBar tout simplement donc plutot que de me compliquer la vie (je m'étais pris la tete avec des boucles while ) j'ai juste mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ProgressBar.Maximum = 100;
    ProgressBar.Value = e.ProgressPercentage;
    Dans l'évenement UploadProgressChanged... voila, c'était pas plus compliqué

    Par contre, j'ai un autre souci maintenant... vu que j'utilise UploadFileAsync et plus UploadFile, l'upload se fait en background et ne bloque plus l'application pendant le transfert comme le faisait UploadFile... En fait il faut que tant que la ProgressBar n'est pas arrivée au maximum, l'utilisateur ne puisse pas faire autre chose (dans le cas de transferts de gros fichiers par exemple)

    Comment je peux faire ca? y a t'il un moyen de provoquer l'évenement UploadProgressChanged??

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Nikamura Voir le message
    En fait il faut que tant que la ProgressBar n'est pas arrivée au maximum, l'utilisateur ne puisse pas faire autre chose (dans le cas de transferts de gros fichiers par exemple)
    C'est pas le mieux

    Je te conseille de faire e nsorte que, pendant l'upload, l'utilisateur puisse faire ce qu'il veut. Ensuite, toutes les actions faîtes durant ce moment sont stockées dans un buffer/une liste et, à la fin de l'upload, tu exécutes le contenu de la liste (donc les actions de ton user).

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    une idée: proposes à l'utilisateur une petite partie de sudoku pendant le chargement

    ou plus sérieusemenet (ah bon, jl'étais pas avant ? ) , tu peux effectivement limiter les actions disponibles en fonction de la teneur des informations chargées..

    Mais , j'avoue (comme thomas) que c'est "pénible" les logiciels ou t'as plus la main pendant qu'une action de chargement est en cours

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  8. #8
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    La, je suis bien d'accord, malheureusement, il ne faut pas que l'utilisateur puisse faire ce qu'il veut pendant le transfert...

    En fait mon application permet (dans l'ordre) de selectionner des fichiers, les compresse, upload le fichier compressé sur le serveur, et envoie un mail.

    L'utilisateur peut donc recommencer autant de fois qu'il veut. C'est pourquoi dans le cas de compression / upload de gros fichiers j'ai pensé qu'il serait mieux de mettre une progressBar pour visualiser l'avancement de ces taches. Pendant ce temps, l'utilisateur peut reduire l'application en SysTray. Il FAUT qu'elle soit bloquée pendant ce temps

  9. #9
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    En fait le fond du probleme c'est que :

    - la méthode UploadFile bloque le thread appelant, donc pas de ProgressBar
    - la méthode UploadFileAsync permet d'afficher la ProgressBar mais n'est pas bloquante

    Alors que moi je veux que l'application soit bloquée, tout en affichant ma PRogressBar... Y'a pas moyen de trouver un compromis? xD

    Au pire je pourrais faire un thread en parallele pour afficher ma ProgressBar et bloquer le thread principal tant que WebClient.IsBusy non?

  10. #10
    Membre du Club Avatar de Nikamura
    Inscrit en
    Avril 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 71
    Points : 54
    Points
    54
    Par défaut
    Bon ben vu que ca n'a l'air de motiver personne (et aussi que j'en ai marre de me prendre la tete depuis un bon moment lol) j'ai décidé de feinter, les threads n'étant pas une bonne solution...

    Du coup, lorsque je lance le process, je lance une fonction SetVisible(bool P_state) (Java vous dites? non je vois pas lol ) qui me desactive tous les controles "sensibles".
    Puis je me suis abonné a l'évenement UploadFileCompleted pour les réactiver une fois l'upload terminé, et ca marche nickel !

    Merci a tous pour votre aide

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

Discussions similaires

  1. Une progressbar sur un splash screen
    Par elhou dans le forum Débuter
    Réponses: 9
    Dernier message: 17/02/2011, 14h57
  2. chrono + progressbar sur USF
    Par edelweisseric dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/01/2010, 21h52
  3. ProgressBar sur un Multi File Upload
    Par Navyel dans le forum Flex
    Réponses: 1
    Dernier message: 17/05/2008, 00h29
  4. ProgressBar sur un chart
    Par arnoweb dans le forum Flex
    Réponses: 1
    Dernier message: 13/05/2008, 09h23
  5. ProgressBar sur action
    Par will2taz dans le forum VB.NET
    Réponses: 2
    Dernier message: 03/12/2007, 10h26

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