Inter-Threads
Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Inter-Threads



  1. #1
    fabien024

    Inter-Threads


    ------

    Bonjour,

    Je programme en VB.NET avec Visual studio.

    Dans mon code j'ai un thread qui gère la lecture d'un datagramme, il est appelé sur Timer comme le montre le code ci-dessus:
    Code:
    public message As String = ""
    Private Sub Timer_Tick(sender As Object, e As EventArgs) Handles Timer.Tick
            Dim start As Thread = New Thread(AddressOf Receiver)
            start.IsBackground = True
            start.Start()
    End Sub
    
    Public Function Receiver()
            Dim endPoint As IPEndPoint = New IPEndPoint(IPAddress.Parse("132.1.32.215"), port)
            Dim data() As Byte
            Try
                data = receivingClient.Receive(endPoint)
                message = Encoding.ASCII.GetString(data).ToString
                SetText(message)
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
            Return True
     End Function
    J'arrive bien à récupérer le message dans la variable message, en débogage elle contient bien une valeur.

    J'essaie ensuite de l'afficher sur ma Form (form1) par l'intermédiaire du sub "SetText", j'ai récupéré un code de Microsoft :

    Code:
    Delegate Sub SetTextCallback([text] As String)
    Private Sub SetText(ByVal [text] As String)
            If Me.Label1.InvokeRequired Then
                Dim d As New SetTextCallback(AddressOf SetText)
                Me.Invoke(d, New Object() {[text]})
            Else
                Me.Label1.Text = [text]
            End If
    End Sub
    Seulement, le label1 ne change pas de valeur, comme si l'affichage n'était pas rafraichit.

    Merci de votre aide,

    -----
    Dernière modification par Jack ; 08/02/2017 à 12h08. Motif: remplacement balises php par balises code

  2. #2
    matthieu2

    Re : Inter-Threads

    Bonjour,

    De la même manière que tu as trouvé le code sur microsoft pour setter le text:

    https://msdn.microsoft.com/fr-fr/lib...code-snippet-1

    Permet de redessiner le form.

    @+

  3. #3
    Bluedeep

    Re : Inter-Threads

    Citation Envoyé par fabien024 Voir le message
    Seulement, le label1 ne change pas de valeur, comme si l'affichage n'était pas rafraichit.

    Merci de votre aide,
    Quand tu met un breakpoint sur

    Me.Label1.Text = [text]
    ça s'arrête ?

  4. #4
    polo974

    Re : Inter-Threads

    bon, j'ai largué le dev microsoft, mais de mémoire dans mfc (je sais même pas si ça existe encore), c'était risqué d'attaquer le graphique depuis un autre thread.
    c'était pareil avec qt3 et ça ne doit pas être les seuls...

    donc d'abord vérifier si on a le droit de le faire avec le système graphique utilisé.

    ensuite, c'est vrai qu'il fallait aussi lancer un redraw ou un truc du genre (cf matthieu2), car sinon, en cas de gros changements, à chaque étape, toute la couche graphique est secouée (ce qui entraîne une grosse perte de perf)...

    attention, le fait que ça marche là, maintenant avec juste un "redraw" ne veut pas dire que ça ne va pas planter plus tard (vécu avec qt3 => on risque de tomber dans des situations d'interlock dont on n'est pas maître, et bien sûr le jour de la présentation au client ou pire plusieurs mois après le déploiement...).
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    fabien024

    Re : Inter-Threads

    Bonjour à tous,

    Merci de vos réponses, effectivement il faut reconstruire le contrôle ou utiliser d'autres moyens.

    Fabien.

  7. #6
    Bluedeep

    Re : Inter-Threads

    Citation Envoyé par polo974 Voir le message
    bon, j'ai largué le dev microsoft, mais de mémoire dans mfc (je sais même pas si ça existe encore), c'était risqué d'attaquer le graphique depuis un autre thread.
    Pour être précis on ne peut pas manipuler un contrôle depuis un thread qui n'est pas celui qui a effectue l'instanciation. sur ce point tu as raison mais tu as tort sur le reste car tu as mal analyse le fonctionnement de a méthode SetText qui, précisément, test la nécessité d'utiliser l'invocation indirecte et dans ce cas se rappelle elle même dans le contexte du thread d'instanciation (c'est le but de la methode Invoke - et c'est un peu le b-a-ba de la programmation multithread en environnement .Net-Winform, même si le PO a un peu oublie de préciser qu'il travaillait en Winform)

Discussions similaires

  1. Les threads en java
    Par invite585703c8 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 19/06/2011, 10h14
  2. les threads sur Python
    Par invite75a667e5 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 16/01/2010, 21h05
  3. Transformer un inter tout ou rien en inter à impulsion
    Par invite18d10dc6 dans le forum Électronique
    Réponses: 10
    Dernier message: 27/04/2008, 13h05
  4. les threads
    Par inviteacb3e291 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 10/10/2005, 16h32
  5. théorie des ensembles : démonstration A inter (B U C) = (A inter B) U (A inter C)
    Par invite56460777 dans le forum Mathématiques du supérieur
    Réponses: 19
    Dernier message: 19/11/2004, 15h00