Bonjour,

J'ai une question qui me parait assez récurrente pour avoir balayer la plupart des FAQ et forum ...

Description du projet :

Je possède un formulaire principale nommé baseForm
Je possède un formulaire secondaire qui accueille une TextBox de console nommée consoleForm

Je possède une classe qui effectue plusieurs calcules, nommée PoolingIP

Lorsque l'on clique sur un bouton de baseForm, celui-ci creé un thread qui démarre la Public Sub "ecouteurUDP" de la classe PoolingIP

(Cette sub écoute en permanence sur le portLocal spécifié, les trames UDP)

J'aimerais déjà, que lorsque la sub "ecouteurUDP" se lance, un message dans ma TextBox de mon consoleForm.


J'ai essayé le délégué de cette façon (issu du msdn) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   Delegate Sub SetTextCallback([text] As String)
 
 Private Sub SetText(ByVal [text] As String)
 
        ' InvokeRequired required compares the thread ID of the
        ' calling thread to the thread ID of the creating thread.
        ' If these threads are different, it returns true.
        If Me.textBox1.InvokeRequired Then
            Dim d As New SetTextCallback(AddressOf SetText)
            Me.Invoke(d, New Object() {[text]})
        Else
            Me.textBox1.Text = [text]
        End If
    End Sub
Je cale donc ca dans mon consoleForm. De cette manière je pensais que mon 'ecouteurUDP' pourrait afficher ce qu'il reçoit grâce à l'appel : consoleForm.SetText("blablabla")

... Mais non !!

J'ai fait un débogage pas à pas, et je me suis aperçu qu'il ne passe pas par la méthode 'invoke' de SetText !

En fait celà fonctionne si le thread et la Box sont dans le même form. (ce n'est pas le cas ici )

Je m'en réfère à vous ...

Merci pour votre aide.