inter-threads

Le
greg
Bonjour,
dans le Private Sub Port1_DataReceived
après le code Port1.ReadLine
je récupère la valeur pour afficher dans un textBox mais cette erreur
s'affiche

Opération inter-threads non valide : le contrôle TextBox a fait l'objet d'un
accès à partir d'un thread autre que celui sur lequel il a été créé.

pouvez vous m'aider afin d'inserer la valeur

merci
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Vincent Guichard
Le #19516241
greg a écrit :
Bonjour,
dans le Private Sub Port1_DataReceived
après le code Port1.ReadLine
je récupère la valeur pour afficher dans un textBox mais cette err eur
s'affiche

Opération inter-threads non valide : le contrôle TextBox a fait l'o bjet
d'un accès à partir d'un thread autre que celui sur lequel il a é té créé.

pouvez vous m'aider afin d'inserer la valeur

merci



De mémoire c'est un problème propre à VB.NET. Donc cela aurait plus ça
place sur le forum m.p.fr.dotnet.vb plutôt que celui-ci (VB6 et antér ieurs).

Sinon c'est un problème dont l'explication est simple, même si sa
résolution est complexe: la réception des données se fait dans une
thread différente de la gestion de l'affichage, et donc tu ne peux pas
écrire directement dans les contrôles depuis la fonction DataReceived .
Il faut que tu dises au contrôle de se mettre à jour lui même (en
principe, cela se fait avec une fonction délégée: En gros, tu envoi e un
message au contrôle lui demandant de se mettre à jour tout seul). Voi r
doc du coté de InvokeRequired et de Invoke pour le contrôle que tu ve ux
mettre à jour.

Vincent Guichard
Greg
Le #19525721
merci de votre aide, c'est simple apres avoir bien compris
ce que j'ai fait:
Private Delegate Sub deleg1(ByVal donnee As String)

dans

Private Sub RS232_DataReceived

If Me.InvokeRequired Then

Me.Invoke(New deleg1(AddressOf InsererDansText ), donnee)

End If

et

Private Sub InsererDansText (ByVal donnee As String)

Text1.text = donnee

End Sub

"Vincent Guichard" news: 4a2d164a$0$17759$
greg a écrit :
Bonjour,
dans le Private Sub Port1_DataReceived
après le code Port1.ReadLine
je récupère la valeur pour afficher dans un textBox mais cette erreur
s'affiche

Opération inter-threads non valide : le contrôle TextBox a fait l'objet
d'un accès à partir d'un thread autre que celui sur lequel il a été créé.

pouvez vous m'aider afin d'inserer la valeur

merci



De mémoire c'est un problème propre à VB.NET. Donc cela aurait plus ça
place sur le forum m.p.fr.dotnet.vb plutôt que celui-ci (VB6 et antérieurs).

Sinon c'est un problème dont l'explication est simple, même si sa
résolution est complexe: la réception des données se fait dans une
thread différente de la gestion de l'affichage, et donc tu ne peux pas
écrire directement dans les contrôles depuis la fonction DataReceived.
Il faut que tu dises au contrôle de se mettre à jour lui même (en
principe, cela se fait avec une fonction délégée: En gros, tu envoie un
message au contrôle lui demandant de se mettre à jour tout seul). Voir
doc du coté de InvokeRequired et de Invoke pour le contrôle que tu veux
mettre à jour.

Vincent Guichard
Publicité
Poster une réponse
Anonyme