IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Afficher dans une form les valeurs calculées par un thread


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 144
    Points : 75
    Points
    75
    Par défaut Afficher dans une form les valeurs calculées par un thread
    Bonjour,

    Je voudrais afficher dans une form des valeurs calculées par un thread.

    Le thread s'occupe de lire les données qui arrivent sur le port série. Celles-ci sont stockées dans la variable globale m.

    Je pensais qu'il suffirait d'attribuer au textbox TB01 qui se trouve dans la form1 la valeur de m. (tb01.text = m). Mais apparemment cela ne fonctionne pas.

    Comment peut-on récupérer dans une form des valeurs calculées dans un thread ?

    Dans l'exemple ci-dessous, le thread calcule la date et heure du jour. Je voudrais afficher la valeur de hrm dans le textbox TB01.

    Merci 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
    Imports System.Threading
     
    Public Class Form1
        Dim th1 As Thread
     
        Private Sub CB01_Click
            th1 = New Thread(AddressOf HEURE01)
            Timer1.Interval = 3000
            Timer1.Enabled = True
        End Sub
     
        Private Sub HEURE01()
            Dim i As Integer = 1
            do
                hrm = DateTime.Now.ToString
                Thread.Sleep(1000)
            loop
        End Sub
     
        Private Sub Timer1_Tick
            TB01.Text = hrm
        End Sub
    End Class

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Crée dans Form1 une routine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UpdateDateTextBox(dt AS string )
    TB01.Text = dt
    Puis déclare et crée un delegate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Delegate Sub UpdateTextBox_Delegate( dt As dateTime)
    // Set up  delegate to allow asynchronous calls between threads.
    Dim UpdateTextBox_Caller As UpdateTextBox_Delegate
              (AddressOf Form1.UpdateDateTextBox)
    et dans l'event du thread :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.BeginInvoke(UpdateTextBox_Caller,hrm)
    Moyennant quelques erreurs de syntaxe (je ne connais pas VB), cela devrait résoudre le problème.

  3. #3
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    et pour l'explication : un controle ne peut être modifié que par le thread qui l'a créé (le thread principal en général)
    quand on est dans un autre thread il faut dire à un controle d'invoker un pointeur vers une sub

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,
    Je te conseille de lire les titres de la FAQ, bien souvent tu peux résoudre un problème seul sans avoir à poster grâce à la FAQ, la preuve, la solution à ton problème était ici :
    http://faqvbnet.developpez.com/?page...m_graph_access
    Bien à toi.

    P.S. : Pense au balise code pour une meilleur lisibilité

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Merci pour vos réponses. Elles été fort utiles.
    (l'exemple dans les fac n'était pas trop clair pour moi).

    Encore merci.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 144
    Points : 75
    Points
    75
    Par défaut
    Voici le code qui fonctionne en VB.NET :

    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
    Imports System.Threading
     
    Public Class Form1
        Dim th1 As Thread
        Public Delegate Sub upd_delegate(ByVal dt As String)
     
        Private Sub CB01_Click
            TB01.Text = DateTime.Now.ToString
            th1 = New Thread(AddressOf Thread01)
            th1.Start()
        End Sub
     
        Private Sub Thread01()
            Do
                Me.TB01.Invoke(New upd_delegate(AddressOf upd), DateTime.Now.ToString)
                Thread.Sleep(1000)
            Loop
        End Sub
     
        Private Sub upd(ByVal dt As String)
            TB01.Text = dt
        End Sub
     
    End Class
    Encore merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PPT-2007] Afficher dans une forme la valeur d'une variable
    Par JLBERTHEAS dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 01/10/2009, 22h31
  2. Afficher dans une datagridview un XML générer par Excel
    Par Arsou dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/09/2009, 11h26
  3. Réponses: 3
    Dernier message: 07/08/2009, 12h59
  4. Réponses: 3
    Dernier message: 22/04/2007, 01h45
  5. Comment afficher dans une combobox les driver des imprimante
    Par lassad dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/10/2005, 09h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo