Telechargement d'image

Signaler
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018
-
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018
-
Bonjour,
Pour mon programme je telecharge des photos depuis une boucle via un thread.

Thread t = new Thread(new ParameterizedThreadStart(Lance_Telechargement));

           t.Start(emplacementinfofilm + "\"); 



je l'ai mis dans un thread car j'ai pas mal d'image a telecharger, en fait je parcours un datagried avec des photos a prendre sur internet.


Jusque la tous marche si je laisse le programme telecharger toute les images, sinon les fichiers sont cree mais illisible.

Comment puis je faire pour que le telechargement se fasse et que le programme attend sans fige mais peut etre avec une progresse barre ou autre . Merci


voici le thread

// telechargement du fichier
        private void Lance_Telechargement(object para)
{


    try
    {
        
        WebClient client = new WebClient();
        client.DownloadFile(vignette2.Text, para + "poster.jpg");
    }
    
    catch 
    {
           MessageBox.Show("Le fichier suivant "+para + "poster.jpg n'a pas pu etre téléchargé");
    }
    }


R A P A K O O T I

9 réponses

Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Bonjour,

Ou est ta boucle dans ton code actuellement? Si tu veux faire du multi threading avec des boucles tu peux voir du côté de Parallel.foreach ici.
Pour la progress bar c'est une bonne idée mais tu dois connaitre le nombre d'éléments que tu va télécharger ou le nombre de thread que tu va lancer pour pouvoir l'utiliser (pour connaitre le pas ou la valeur max).
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018

J ai pas mit la boucle car en elle même elle fonctionne . Je parcours juste tous les lignes d une datagriedview contenant l emplacement de fichier nfo et donc à chaque ligne je récupére différent element dont l adresse d une image en fait faudrait que je bloque la fermeture du programme avec une progressbarre tant que toute les images ne sont pas télécharger
R A P A K O O T I
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Ah d'accord. Tu peux alors mettre ta boucle dans un background worker.
- ça empêchera ton programme de se bloquer
- tu peux enregistrer les évènements de modification(pour la progressbar)
- tu peux enregistrer l’évènement de fin pour savoir quand le programme a fini son boulot.
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018

Le souci est que je maîtrise pas le background worker :-( en fait faut que j arrive à détecte la fin du thread comme ça quand ils sont tous fini je débloque la fermeture du programme :-)


R A P A K O O T I
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Alors voila comment faire:
//on crée le background worker
BackgroundWorker bwDl = new BackgroundWorker();

//on défini la fonction appelée
bwDl.DoWork += new DoWorkEventHandler(_bw_DoWork);

//on défini la fonction appelée quand le boulot est fini
bwDl.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_bw_RunWorkerCompleted);

//on démarre le job
bwDl.RunWorkerAsync();

//fonction qui fait les téléchargements
void bwDl_DoWork(object sender, DoWorkEventArgs e)
{
    //mets ta boucle comme elle éxiste déjà.
    //rien à changer normalement
}  

//évènement de fin de boulot
void _bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    //message, notification...
 }
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018

Merci beaucoup je test se soir

R A P A K O O T I
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018

merci encore , mais je recupere comment mon parametre ? pour lance le telecharment?

R A P A K O O T I
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Re,

Désolé j'avais pas vu que tu avais un paramètre .
Tu peux faire comme ca :
bwDl.RunWorkerAsync(parametre);

void bwDl_DoWork(object sender, DoWorkEventArgs e)
{
    //le paramètre est récupéré via sender :)
    //mets ta boucle comme elle éxiste déjà.
    //rien à changer normalement
}

j'espère que ca marchera pour toi comme ca.
Messages postés
92
Date d'inscription
mercredi 4 décembre 2002
Statut
Membre
Dernière intervention
18 mai 2018

Il doit y avoir une erreur j'ai une
Erreur 1 Le nom '_bw_DoWork' n'existe pas dans le contexte actuel E:\Dropbox\Programmation Csharp\Premier programme\Lister film\deuxieme sauvegarde Filmeur 25072012\Filmeur\Form1.cs 380 63 Filmeur

et
Erreur 2 Le nom '_bw_RunWorkerCompleted' n'existe pas dans le contexte actuel E:\Dropbox\Programmation Csharp\Premier programme\Lister film\deuxieme sauvegarde Filmeur 25072012\Filmeur\Form1.cs 383 87 Filmeur


POur pallier ca j'ai tenté de mettre le composant backgrounder mais je peux pas le lance plusieurs fois au telechargement d'image



R A P A K O O T I