Pb rafraichissement label dans un thread

Résolu
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 12 août 2004 à 21:01
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 13 août 2004 à 00:54
Voila j'appelle un service web de facon asynchrone :

private void button1_Click(object sender, EventArgs e)
{
DownloadFile.Service1 DF = new DownloadFile.Service1();
label8.Text = "Debut : " + DateTime.Now.ToString("T") + " " + DateTime.Now.Millisecond + Convert.ToChar(13) + Convert.ToChar(10);
IAsyncResult iAr = DF.BeginGetCategories(null, null);
while (!iAr.AsyncWaitHandle.WaitOne(100, false))
{
label8.Text += "Chargement des données en cours" + " " + DateTime.Now.ToString("T") + " " + DateTime.Now.Millisecond + Convert.ToChar(13) + Convert.ToChar(10);
//statusStripPanel1.Text = "Chargement des données en cours";
}

checkedListBox1.DataSource = DF.EndGetCategories(iAr);
statusStripPanel1.Text = "Prêt";

DF.Dispose();
checkedListBox1.Focus();
}

L'appelle Asynchrone fonctionne correctement, Dans mon label, j'ai bien une incrementation de 100ms jusqu'a la fin de l'appell mais le problème c'est que mon label s'affiche d'un seul bloque, il attend la fin de l'appel pour m'afficher mon label, alors que le label a bien été completé lors de l'appel asynchrone puisque j'ai :

Chargement des données en cours 14:25:48 850
Chargement des données en cours 14:25:48 950
etc....

mais le label s'affiche en un seul bloque :sad)

il existerais pas une methode a appellé pour qu'il se rafraichisse qd j'en ai envie, c'est à dire dans la boucle ?

merci

Cyril

4 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 août 2004 à 22:14
J'ai pas bien compris , qu'entends tu par un seul bloc....

Application.DoEvents dans ta boucle pourrait résoudre ton problème si je l'ai bien compris...

::|The S@ib|::
MVP C#.NET
3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
12 août 2004 à 22:34
Merci : ca fonctionne

Par un seul bloque, je voulais dire, que
Chargement des données en cours 14:25:48 850
s'affichait en meme temps que
Chargement des données en cours 14:25:49 550

donc encore une fois merci, ca faisait depuis ce matin que ca me tournait autour :)

mais j'aimerais bien comprendre.

pourquoi il faut que je signale au programme de travailler ?

J'ai pas encore cherché d'infos sur Application.DoEvents je vais chercher, mais je trouve ca intrigant

Merci

Cyril
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
12 août 2004 à 23:40
LE application.doevents permet en fait de dire au système d'executer les tâches qu'il à dans sa file d'attente, avant que ton thread à toi continue a s'executer.

Le problème dans ta boucle c'est que le système à les tâches de raffraichissement graphique en attente (typiquement celui du label), d'ou le doevents ...

::|The S@ib|::
MVP C#.NET
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
13 août 2004 à 00:54
ok encore merci

Cyril
0
Rejoignez-nous