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

  1. #1
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    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 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 119
    Points
    25 119
    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/

  3. #3
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    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 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 119
    Points
    25 119
    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 ...

  5. #5
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    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 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 119
    Points
    25 119
    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")

  7. #7
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    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

  8. #8
    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 119
    Points
    25 119
    Par défaut
    ca marche pas n'est pas explicite

    message d'erreur ? pas de texte affiché ? en pas en pas que se passe t il ? le paramètre contient bien la valeur à afficher ?

  9. #9
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    Par défaut
    Je n'ai rien qui s'affiche snif Pas de message d'erreur Mais ca bugue, je peux pu interagir vec l appi

  10. #10
    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 119
    Points
    25 119
    Par défaut
    le code m'a l'air bon
    en pas à pas avec des points d'arret ca donne quoi ?

  11. #11
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    Par défaut
    ca marche pa snifouille

  12. #12
    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 119
    Points
    25 119
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    en pas à pas avec des points d'arret ca donne quoi ?
    si tu ne sais pas faire du pas à pas ou que tu ne veux pas en dire plus, on risque d'en rester là ...

  13. #13
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    Par défaut
    Ca ne me donne rien hormi qu'il récupère bien la bonne valeur et apres ca bugue. Pis apres genre une minute où je ne peux plus agir sur l'appli , j'ai la réponse qui apparait dans la textbox et je ne peux toujours pas agir sur l appli (en gros j'ai pu qu' a stopper tout avec le bouton stock de visual studio)

  14. #14
    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 119
    Points
    25 119
    Par défaut
    ca vient d'autre chose peut etre ... tu aurais pas créé des control sur un autre thread ?

    essaye d'instancier AffTextBox3 dans le sub plutot que dans la classe ...

  15. #15
    En attente de confirmation mail
    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
    Points : 101
    Points
    101
    Par défaut
    Cela ne change rien. En tout cas quand je met avant l'invocation du deleguate un message dialog contenant le resultat recu, j'obtiens la bonne valeur. Cela vient donc du systeme de delegate rahlala

+ 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