Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

inter-threads

2 réponses
Avatar
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

2 réponses

Avatar
Vincent Guichard
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
Avatar
Greg
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" a écrit dans le message de
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