Tout d'abord bonjour,
Alors voila mon petit problème J'ai réalisé une petite appli de calcul qui envoie des données à un windows service qui effectue le calcul a partir de ses données et renvoie un résultat à l'application.
Seulement, lorsque j'essaye dans mon readcallback (qui récupère le flux envoyé par le windows service et en extrait le résultat) d'insérer dans la textbox (ici textbox3) de mon application le résultat, cela ne marche pas et j'ai l'erreur suivante (snif) :
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éé.
Voici ci dessous le code de mon application et en rouge la partie reception :
Merci d'avance pour votre aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 Public reception As New Threading.ManualResetEvent(False) Private tabByte1(1024) As Byte Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Try Dim client As New Net.Sockets.TcpClient() 'Le client va lancer la fonction SendCallBack' client.BeginConnect("127.0.0.1", 1039, New AsyncCallback(AddressOf SendCallback), client) 'On se met en attente d'un evenement pour recommencer' reception.WaitOne() Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub 'SendCallBack : fonction d' envoie des données ' Public Sub SendCallback(ByVal ar As IAsyncResult) Dim client As Net.Sockets.TcpClient = CType(ar.AsyncState, Net.Sockets.TcpClient) client.EndConnect(ar) Dim Content(1024) As Byte Dim nbTextBox1 As String Dim nbTextBox2 As String Dim nbSend As String nbTextBox1 = Me.TextBox1.Text nbTextBox2 = Me.TextBox2.Text nbSend = nbTextBox1 + "/" + nbTextBox2 Content = System.Text.Encoding.ASCII.GetBytes(nbSend.ToCharArray()) Dim flux As Net.Sockets.NetworkStream = client.GetStream() flux.Write(Content, 0, Content.Length) 'On se met en attente de la réception de données' flux.BeginRead(tabByte1, 0, tabByte1.Length, New AsyncCallback(AddressOf ReadCallback), flux) reception.WaitOne() End Sub 'on recupere le flux de données provenant du service windows' Public Sub ReadCallback(ByVal ar As IAsyncResult) Dim flux As Net.Sockets.NetworkStream = CType(ar.AsyncState, Net.Sockets.NetworkStream) Dim nbResultat As Integer = flux.EndRead(ar) Dim nbTextBox3 As String = System.Text.Encoding.ASCII.GetString(tabByte1) Me.TextBox3.Text = nbTextBox3 End Sub End Class
Bibi les gens
Partager