MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 2008
-
10 avril 2005 à 16:25
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDerniè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 ?
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 10 avril 2005 à 16:55
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.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 10 avril 2005 à 16:59
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
Vous n’avez pas trouvé la réponse que vous recherchez ?