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 :

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
Merci d'avance pour votre aide

Bibi les gens