parlaciel
Messages postés33Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention22 décembre 2009
-
31 juil. 2008 à 14:13
parlaciel
Messages postés33Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention22 décembre 2009
-
1 août 2008 à 14:41
Bonjour à vous!
j'ai posté sur un autre topic il y a de ça peu de temps... mais je ne suis pas sûre d'avoir été lu. Je me permet de reposter car j'ai beau chercher je ne trouve pas de solution et c'est sérieusement bloquant dans l'appli que je suis en train de faire.
Donc désolée si ce post n'a pas lieu d être.
je m'explique: je travaille sur une form qui doit se rafraichir à chaque événement survenant sur un softphone que je scanne via une classe différente. le problème vient bien de là puisque l'erreur cross-thread.. apparait lorsque j'appelle mon paint via la fonction qui scanne.
en d' autres termes thread1 appelle ma form , thread2 communique avec mon softphone, methode ReceiveMessages() scanne le téléphone, et c'est par cette dernière que je lance mon paint().
j'ai tenté le délégate mais soit je m'y prend comme un pied soit ce n'est pas ce qui est approprié à ce que je veux en faire.
Merci d'avoir accordé de l' attention à mon problème et plus grand merci encore si vous avez un début de solution parsque je suis vraiement perdue!
A voir également:
Un paint qui tient tête... peut être un multithread...
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 31 juil. 2008 à 15:34
tu n'as pas à appeler ton paint! Tu dois soit appeler invalidate, soit refresh (selon que tu veux invalider uniquement une zone ou tout le control), ca va lancer le onpaint tout seul...ensuite il y a un tuto sur le site expliquant les opération cross thread et la manière de résoudre le problème...
Vous n’avez pas trouvé la réponse que vous recherchez ?
parlaciel
Messages postés33Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention22 décembre 20091 31 juil. 2008 à 15:58
@ maitredede : oui c' est tout à fait ça, c est ce que je souhaite faire sachant que ma form est un bandeau téléphonique qui doit afficher des boutons ou les faire disparaitre en fonction de l'événement survenu sur le téléphone...et faire remonter différentes infos.
@leprov : je suis débutante en programmation et malheureusement ce que tu dis ne me parle pas des masses... pourrais-tu être plus explicite stp? sinon pour les tuto concernant le cross thread j'ai bien tenté les delegates mais ça me fait toujours l'erreur :'(
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 1 août 2008 à 09:58
donc : Tout d'abord, ton paint ne dois pas être un paint personnalisé fait dans une méthode que tu appelles quand tu veux changer l'affichage. Un test simple, fait ca, puis passe une fenetre par dessus la tienne, tout ce que tu as fait dans ta méthode a part a disparu. Bref, tout code de dessin doit etre dans la méthode onpaint (tu dois override la méthode onpaint de base de ton formulaire).
Donc, tu n'appeles jamais ton paint, mais une méthode perso qui va juste changer une variable qui changera le comportement de ton paint (tu devras donc tester la valeur de cette variable toi meme, et faire le paint en fonction)
Pour les cross thread, Le tuto est clair et simple, il devrait se suffire alui meme
parlaciel
Messages postés33Date d'inscriptionmardi 25 mars 2008StatutMembreDernière intervention22 décembre 20091 1 août 2008 à 11:12
je vais tenter ce que tu proposes, mon paint() n' est pas le Paint() de la form mais ma fonction perso... mea culpa.
pour le cross thread , j'ai bien suivi le tuto mais je ne vois pas comment appeler mon delegate.
en gros ça donne ça:
class FrmBandeau :
public void paint()
{
...
}
class ConnexoinReseau()
public delegate void paintFrame();
public void ReceiveMessages()
{
while (isRunning)
{
if (tServerProtocol.State != ChannelState.Opened)
{
System.Threading.Thread.Sleep(500);
continue;
}
IMessage response = tServerProtocol.Receive();
if (response != null)
{
modele.checkReturnMessage(response);
}