Cross-Thread Operation non-valid

EricNRC Messages postés 24 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 24 janvier 2008 - 3 août 2006 à 20:06
pymaster Messages postés 74 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 14 août 2006 - 3 août 2006 à 22:00
Bonjour

Tout d'abord Bonne journée à tous!
Je tente de programmer avec VB 2005 express et je me bute a une sérieux problème

J'aimerais savoir s'il existe au moins une personne qui comprend pourquoi à chaque fois que je tente d'assigné une valeur text a un text box j'ai toujours l'erreur "Cross-Thread Operation non-valid" ... d'ou ça sort cette M.... là! je n'ai jamais eu ce type d'erreur en VB 2003 .  Alors si vous savez pourquoi j'ai ce genre d'erreur, pouvez vous me dire comment y remedier svp? Les Helps sur le web son completement inutile, je n'y comprend rien...

Merci et pardonné moi ma frustation !.

Eric le Canadien Frustré!

3 réponses

pymaster Messages postés 74 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 14 août 2006
3 août 2006 à 20:40
bonjour !

Erreur chiante mais nécéssaire. Les Cross Thread error sont une protection qui empêche que tu monte de code de manière à ce que deux Threads puisse avoir accès à une même ressource en même temps. Ce genre de situation peut créé des bugs aléatoires presque impossible à corrigé et qui peuvent te rendre chauve avant l'âge ^_^. Le Threads principal, celui qui contrôle l'interface et celui dans lequel s'exécute ton code habituellement lorsque que tu ne fais pas de multiThread devrait être le seul à jouer avec l'interface.

Bien sur ya un moyen de contourner ça, il faut faire des Invoke des fonctions.

Je vais te donner un exemple avec unparcque j'ai le code juste à coté de moi, mais c'est possible d'utiliser ça pour tout

MonPanel.Invoke(New addControlToPanel(AddressOf MonPanel.Controls.Add), monControl)

Donc quelque part dans mon code j'ai déclaré :

Private Delegate Sub addControlToPanel(ByVal value As System.Windows.Forms.Control)

Un deleguate qui à la même signature que la fonction MonPanel.Controls.Add. Donc lorsque je veux ajouter un control à mon panel je fais un invoke sur celui-ci. Je lui passe l'adresse de la fonction en premier paramètre et les autres paramètre je lui pousse tous les paramètres que cette même fonction demande.

Voila, c'est complexe mais c'est comme ça.

Ça fait pas mal de stock à comprendre, si ta besoin de plus de précision tu peux me le demander, moi aussi j'ai eu des troubles avec ça ^_^

PY
0
EricNRC Messages postés 24 Date d'inscription jeudi 25 août 2005 Statut Membre Dernière intervention 24 janvier 2008
3 août 2006 à 21:28
Merci! PY
Si je comprend bien ton exemple est valide lorsque tu veux crée des controls en runtime! Mais lorsque je veux faire un invoke pour changer la valeur d'un textbox.text . la valeur .text est une property donc je ne peu pas avoir la même signature. PCQ les delegate n,'accepte pas les propertys.

alors?

Merci
0
pymaster Messages postés 74 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 14 août 2006
3 août 2006 à 22:00
Rebonjour !


Bien tu peux faire des invoke des fonctions suivantes :


Me.MyTextBox.AppendText()
Me.MyTextBox.ResetText()


Sinon tu peux lire ça , ça et ça ( C'est en anglais par contre )

Bonne chance,
PY


 


 
0
Rejoignez-nous