[C# 2.0] Problemes de thread [Résolu]

Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
- - Dernière réponse : cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
- 10 avril 2005 à 18:03
Bonjour a tous.



Je suis en train de faire une classe qui fourni une connexion a une
base de données pour mon application, et qui lui permet aussi de lui
indiquer les evenements de la connexion. (quand on s'est bien connecté,
quand on arrive pas a se connecter, ...)

Elle a donc les méthodes Connect, Disconnect, et les events DBConnected et DBDisconnected

J'ai déclaré un singleton pour que toutes les classes de mon
application qui en ont besoin utilise la meme instance de cette classe
qui fournit la connexion.



Mon application tente de se connecter via ce singleton dès qu'elle est
lancée. Je l'inscris aux evenements DBConnected / DBDisconnected cités
ci-dessus.

Dans les méthodes de ces évènements, je change le texte de ma barre de
statut pour y indiquer un message correspondant a l'état de la
connexion.



Pour ne pas que l'application soit bloquée pendant le temps de
connexion (surtout si il y a un timeout), j'appele la méthode Connect()
dans un nouveau Thread.



Cependant, voila. Visual C# Express me lève une erreur, d'apres lui il
y a un "Illegal cross-thread operation" lors du changement de texte
dans la barre de statut.

Bien sur, quand je n'utilise plus le Thread, aucun probleme... Mais bon, c'est moins rigolo...

Et quand je lance l'appli en dehors de visual studio, aucune erreur n'est levée.



Pourtant j'imagine que si Visual Studio s'alarme, c'est qu'il y a une raison, donc j'ai bien du faire une erreur...



J'ai cherché toute l'aprem, mais j'arrive pas a trouver la raison... Je
sais tres bien qu'il ne faut pas acceder aux ressources s'un autre
thread, mais la je ne vois pas bien ou ce situe cette opération.



Quelqu'un pourrait me donner des indices, ou m'indiquer la bonne marche a suivre ?



Merci.


Mx
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
65
3
Merci
Salut,

Un controle ne doit pas être modifié par un autre thread que celui qui l'a crée, il faut que tu passes par un delegate qui te permettra de changer ton texte dans le contexete du thread ayant crée le controle en utilisant la méthode Invoke du controle.

Cocoricoooooooo !!!!
coq
MVP Visual C#

Dire « Merci » 3

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

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

Commenter la réponse de cs_coq
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
38
3
Merci
En effet, le probleme est résolu ainsi :



private delegate void UpdateControl(string str);



private void UpdateText(string str)


{


StatusLabel.Text = str;


}



void DBDisconnected()

{

BeginInvoke(new UpdateControl(UpdateText), new object[] { "pas ok" });

}



void cp_DBConnected()

{

BeginInvoke(new UpdateControl(UpdateText), new object[] { "ok" });

}




Merci encore pour l'indication :)
Mx

Dire « Merci » 3

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

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

Commenter la réponse de MorpionMx
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
65
0
Merci
On a déjà parler de ça plusieurs fois ces derniers temps mais je n'arrive pas à remettre la main sur les sujets :-(

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
Messages postés
3489
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
38
0
Merci
Ah oui, oki, je vois.

Je vais tenter de retrouver le sujet.



(J'avais pourtant l'impression que, en m'inscrivant aux evenements
depuis ma Form, c'etait elle qui modifiait le texte de ses Controls,
pas un l'autre Thread. C'est pour ca que je comprenais pas...)



Merci coq.

Mx
Commenter la réponse de MorpionMx
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
65
0
Merci
de rien :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq