Thread besoin d 'explication svp [Résolu]

Signaler
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010
-
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010
-
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

Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
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.
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010

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.
Messages postés
168
Date d'inscription
jeudi 28 juin 2001
Statut
Membre
Dernière intervention
18 octobre 2008
7
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.
Messages postés
361
Date d'inscription
jeudi 5 février 2004
Statut
Membre
Dernière intervention
1 octobre 2010

Oki merci je vais regarder ton code je retiens au courant.
Merci.