Thread besoin d 'explication svp

Résolu
cs_wally88 Messages postés 361 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 1 octobre 2010 - 11 juin 2007 à 10:29
cs_wally88 Messages postés 361 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 1 octobre 2010 - 11 juin 2007 à 11:21
Bonjour,

Suite à mon post : http://www.csharpfr.com/infomsg_BOUCLER-SANS-PLANTER_933366.aspx

J'aimerais un petit peu d'aide svp.

4 réponses

cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
11 juin 2007 à 11:03
Salut,

D'après ce que j'ai pu comprendre de ton précédent post, tu cherches à mettre à jour une barre de progression sans bloquer le reste de l'interface.

Si c'est bien ça, le code suivant devrait solutionner ton problème :

private Thread t;

private delegate void ChargeBarre(int value);

public void
MettreAJourBarre
(int value)
{

   
progressBar1.Value = value;

}

privatevoid button1_Click(
object sender,
EventArgs e)
{
    // Initialise la barre de progression :
    // il vaut mieux ne pas le faire dans thread car cela oblige à faire des Invoke

    progressBar1.Minimum = 0;
    progressBar1.Maximum = 100000;

    // On lance le thread en lui passant le maximum en argument
    t =
newThread(
newParameterizedThreadStart(ThreadMethod));
    t.Start(
progressBar1.Maximum
);
}

private void ThreadMethod(object param)
{

    int i = 0;
    int maximum = (int)param;

    while (i <
maximum
)
    {
       // Met à jour la barre de progression
       this.Invoke(new MettreAJourBarre(barre), i);
        // Normalement, le thread réalise un traitement ici
       Thread.sleep(1000);
        i++;
    }

}

Note : si tu supprimes la ligne Thread.Sleep, il est très probable que la barre de progression n'ait pas le temps de se mettre à jour avant que la fin du thread ou qu'elle se mette à jour "par bloc". Ce phénomène est dû au fait qu'on ne peut pas prévoir à quel moment le thread principal (celui où la barre de progression se met à jour) et le thread de travail (celui où il y a la boucle) prennent/laissent la main.
3
cs_wally88 Messages postés 361 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 1 octobre 2010
11 juin 2007 à 11:07
Oui on peu prendre l'exemple de la barre de porgression mais c'est pour tout en faite.
J'ai une combobox ou je charge de donnée depuis une base de donnée. et meme si il y a deux enregistrement la form qui contient la combo est "longue" a s'afficher. Et j'ai un autre prog qui boucle, mais si je retourne sur le bureau et que je reviens sur le prog, le prog ne s'affiche plus correctement tant qu'il na pas fini de boucler.
0
cs_niky Messages postés 168 Date d'inscription jeudi 28 juin 2001 Statut Membre Dernière intervention 18 octobre 2008 7
11 juin 2007 à 11:19
Ce serait bien de montrer comment tu charges les enregistrements depuis la base de données (avec le code environnant).

Pour ton programme qui "boucle", je t'ai donné la solution ci-dessus. Le tout est de ne pas faire des traitements lourds dans la méthode MettreAJourBarre : il faut les faire dans ThreadMethod. Si tu as toujours des problèmes d'affichage, insère la ligne :
Application.DoEvents();
à la fin de MettreAJourBarre.
0
cs_wally88 Messages postés 361 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 1 octobre 2010
11 juin 2007 à 11:21
Oki merci je vais regarder ton code je retiens au courant.
Merci.
0
Rejoignez-nous