Pb rafraichissement label dans un thread [Résolu]

Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
- - Dernière réponse : jesusonline
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
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
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 220 internautes nous ont dit merci ce mois-ci

Commenter la réponse de TheSaib
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
0
Merci
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
Commenter la réponse de jesusonline
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
0
Merci
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
Commenter la réponse de TheSaib
Messages postés
6827
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
17
0
Merci
ok encore merci

Cyril
Commenter la réponse de jesusonline