Thread + textbox

drcmomo Messages postés 182 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 25 décembre 2009 - 20 août 2007 à 10:38
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 20 août 2007 à 15:45
Bonjour tout le monde,
j'aimerais pourvoir afficher des données dans 1 textbox en utilisant un Thread, quand je lance mon application il m'affiche le message d'erreur suivant:

"An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll



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


Mon application  est codée en  C# par contre l'interface graphique est en  VB(ce qui ne pose aucun probléme)
 dans mon application  en C# j'utilise les evenements suivants:



public






delegate



void



DataReceivedHandler
(

Object
sender,

byte
[] data);










public



event



DataReceivedHandler
dataReceived;

private
void comPort_DataReceived(
object sender,
SerialDataReceivedEventArgs e){

Thread.Sleep(200);

byte[] data =
new
byte[comPort.BytesToRead ];

for (
int i = 0; i < data.Length; i++){
 data[i] = (

byte)comPort.ReadByte();
}
dataReceived(

this, data);showByteTab(data);

}

Dans mon Interface en VB
J'utilise 1 textbox pour afficher mes données

Private

Sub s_dataReceived(
ByVal sender
As
Object,
ByVal data()
As
Byte)
Handles s.dataReceived

For i
As
Integer = 0
To data.Length - 1TextBox3.Text &=

String.Format(
"{0:X} ", TAB(i))

NextTextBox3.Text &= vbCrLf

End
Sub

Je vois pas comment résourdre ce probléme quelqu'un  peut me donner une idée?

9 réponses

bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
20 août 2007 à 10:44
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
20 août 2007 à 12:11
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 août 2007 à 12:18
Bidou, l'absence de refresh d'1H30 c'est abusé

/*
coq
MVP Visual C#
CoqBlog
*/
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
20 août 2007 à 13:10
Bidou, tu t'es endormi sur la page ou quoi..

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
20 août 2007 à 14:00
Ha merde, je sais pas ce que j'ai foutu
Désolé pour le doublon donc...

<hr />
-Blog-
drcmomo Messages postés 182 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 25 décembre 2009
20 août 2007 à 15:17
c'est pas grave ,desolé pour le retard j'etais en reunion

J'avais déja essayer la source que tu m'a envoyé ,ça marche sans prob dans une nouvelle application mais elle marche pas dans mon projet.
Le probléme viens d'ici:


dataReceived(this, data); avec


public
event
DataReceivedHandler dataReceived;



private



void
comPort_DataReceived(

object
sender,

SerialDataReceivedEventArgs
e)



{



Thread
t =

new



Thread
(

new



ThreadStart
(Interrogate));







//Thread t = Thread.CurrentThread;



t.Start();







Thread
.Sleep(200);


byte
[] data =

new



byte
[comPort.BytesToRead ];


for
(

int
i 0; i < data.Length; i++){ data[i] (


byte
)comPort.ReadByte(); }


t.Join();dataReceived(


this
, data); //VOIR ***
showByteTab(data);

}

(***)Private





Sub
s_dataReceived(

ByVal
sender

As



Object
,

ByVal
data()

As



Byte
)

Handles
s.dataReceived


For
i

As



Integer
= 0

To
data.Length - 1Application.DoEvents()

TextBox3.Text &=


String
.Format(

"{0:X} "
, TAB(i))  // arriver ici ça beug


Next

TextBox3.Text &= vbCrLf







End



Sub 

 
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 août 2007 à 15:18
Si tu appliques ce qui est dit dans le tuto, ça marchera.

/*
coq
MVP Visual C#
CoqBlog
*/
drcmomo Messages postés 182 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 25 décembre 2009
20 août 2007 à 15:40
L'interface est en VB et mon application est  en C# j'ai pas accés a la méthode INVOKE ni a au textbox
L'interface sert uniquement afficher les données .
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 août 2007 à 15:45
Ce n'est pas spécifique au langage, il faut juste le dire en dialecte VB.NET, mais les classes restent les mêmes.

Ha bon, pas accès au TextBox.
Cette ligne ne compile pas alors ? : TextBox3.Text &= String .Format( "{0:X} " , TAB(i))

Sinon pour l'invisibilité de la méthode Invoke dans l'IntelliSense, vas vérifier que tu n'as pas une option de masquage des membres avancés activée pour VB.NET...

/*
coq
MVP Visual C#
CoqBlog
*/
Rejoignez-nous