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 :

Problème de textbox qui ne veut pas afficher de text


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Par défaut Problème de textbox qui ne veut pas afficher de text
    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

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    depuis un thread il est interdit de modifier un controle
    il faut utiliser un délégué pour repasser sur le thread principal

    http://www.developpez.net/forums/d49...es-difference/
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Par défaut
    Snif, à marche pas, j'ai toujours la même erreur:

    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
     Private Delegate Sub affichTextBox3(ByVal text As String)
        
        Private Sub textBox3Txt(ByVal text As String)
            TextBox3.Text = text
        End Sub
    
        Private AffTextBox3 As New affichTextBox3(AddressOf textBox3Txt)
    
        Public Sub ReadCallback(ByVal ar As IAsyncResult)
            
            'on recupere le flux de données provenant du service windows'
            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)
            AffTextBox3.Invoke(nbTextBox3)
    
        End Sub
    End Class
    J'ai surement oublié quelquechose Mici en tt cas

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    oui, t'as pas du lire le lien que je t'ai envoyé car t'as pas écrit la meme chose

    en plus j'explique le pourquoi du code, donc tant que tu le comprends pas ca sert à rien d'essayer d'écrire quelque chose à taton
    .net est quelque chose de rigoureux, rien ne se fait au hasard

    en plus dans ce lien y a un lien qui détaille encore plus ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Par défaut
    On créé le délégué:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Delegate Sub affichTextBox3(ByVal text As String)
    La fonction qui va etre appelée a partir du delegate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub textBox3Txt(ByVal text As String)
            TextBox3.Text = text
        End Sub
    On créé une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private AffTextBox3 As New affichTextBox3(AddressOf textBox3Txt)
    Apres je fais quoi ? je la passe en parametre ou donc ?
    Ca arrete pa de gueuler autour de moi à cause de leur putin de match de foot d'hier... Bref, je suis largué ...

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il faut demander à un control d'invoker le délégué


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox3.invoke(AffTextBox3, "le texte à mettre dans le textbox")
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 150
    Par défaut
    Bon, je vais me faire engueuler surement une derniere fois :
    J'ai fait ca, cela marche pas :
    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
     
    Private Delegate Sub affichTextBox3(ByVal text As String)
     
        Private Sub textBox3Txt(ByVal text As String)
            Me.TextBox3.Text = text
        End Sub
     
        Private AffTextBox3 As New affichTextBox3(AddressOf textBox3Txt)
     
     
        Public Sub ReadCallback(ByVal ar As IAsyncResult)
     
            'on recupere le flux de données provenant du service windows'
            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)
            TextBox3.Invoke(AffTextBox3, nbTextBox3)
        End Sub
    Mici d'avance

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

Discussions similaires

  1. Problème de session qui ne veut pas garder sa valeur
    Par pierrot10 dans le forum Langage
    Réponses: 10
    Dernier message: 23/06/2011, 12h35
  2. problème de variable qui ne veut pas s'executer
    Par lulu.bleu dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/10/2009, 09h43
  3. [XL-2003] Combobox qui ne veut pas afficher la valeur
    Par david_atx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/07/2009, 16h37
  4. Problème d'accents qui ne veut pas partir
    Par grabriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/09/2008, 10h12
  5. JList qui ne veut pas s'afficher
    Par hamham dans le forum Composants
    Réponses: 16
    Dernier message: 29/01/2007, 18h20

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