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

C# Discussion :

Impossible d'afficher les datas générés par un évenement dans un textbox


Sujet :

C#

  1. #21
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Tu peux placer des points d'arrêt pour voir où le code passe et où il ne passe pas. J'en mettrai un dans la fonction ThreadProcSafe (pour s'assurer qu'elle est bien appelée) et deux dans la méthode SetTextCallback, au début de chaque branche de la conditionnelle, afin de vérifier si il commence bien à passer par la première pour ensuite aller dans la seconde.

    Tu peux également ajouter un bloc try/catch dans la méthode Fonction_ReceptionTrame afin de capturer toutes les exceptions qui pourraient se produire.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Tu peux placer des points d'arrêt pour voir où le code passe et où il ne passe pas. J'en mettrai un dans la fonction ThreadProcSafe (pour s'assurer qu'elle est bien appelée) et deux dans la méthode SetTextCallback, au début de chaque branche de la conditionnelle, afin de vérifier si il commence bien à passer par la première pour ensuite aller dans la seconde.

    Tu peux également ajouter un bloc try/catch dans la méthode Fonction_ReceptionTrame afin de capturer toutes les exceptions qui pourraient se produire.
    J'avais déjà mis en place des points d'arrêt de partout et ce qui me semble le plus bizarre est qu'il passe bien par la méthode ThreadProcSafe ainsi que par le SetText. Cependant, niveau graphique, rien ne s'affiche...
    J'ai aussi mis un try/catch sur dans Fonction_ReceptionTrame, et aucune exception ne se produit.

  3. #23
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Et tu initialises bien la bonne textBox ? Tu n'en aurais pas plusieurs, ou sur un autre formulaire ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Et tu initialises bien la bonne textBox ? Tu n'en aurais pas plusieurs, ou sur un autre formulaire ?
    La textbox est bien initialisée dans le InitializeComponent. J'ai renommé la textbox afin d'être sur qu'elle ne soit pas utilisé autre part et j'ai toujours le même résultat.

    J'ai un Console.WriteLine dans ma Fonction_ReceptionTrame qui m'affiche bien les trames dans la console mais graphiquement je n'ai toujours rien...
    Je remet le code.

    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
     
    delegate void SetTextCallback(string text);
     
            private void SetText(string text)
            {
                if (this.tbx_Frame1.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText);
                    this.Invoke(d, new object[] { text });
                }
                else
                {
     
                    this.tbx_Frame1.Text = text;
                }
            }
     
            private void ThreadProcSafe()
            {
                this.SetText("Ca fonctionne");
            }
     
            public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel Acq)
            {
                 Console.WriteLine(Acq.Id.ToString("X") + " " +
                                    Acq.Data[0].ToString() + " " +
                                    Acq.Data[1].ToString() + " " +
                                    Acq.Data[2].ToString() + " " +
                                    Acq.Data[3].ToString() + " " +
                                    Acq.Data[4].ToString() + " " +
                                    Acq.Data[5].ToString() + " " +
                                    Acq.Data[6].ToString() + " " +
                                    Acq.Data[7].ToString() + " ");
                try
                {
                    if (demoThread == null)
                    this.demoThread.Start();
                }catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

  5. #25
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Et si tu mets un point d'arrêt sur la ligne 14 (this.tbx_Frame1.Text = text;) et que tu regardes le contenu de la variable text, que contient-elle ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par François DORIN Voir le message
    Et si tu mets un point d'arrêt sur la ligne 14 (this.tbx_Frame1.Text = text;) et que tu regardes le contenu de la variable text, que contient-elle ?
    text = ça fonctionne
    après passage, this.tbx_Frame1.Text = ça fonctionne.

    Sur l'interface graphique, rien...

  7. #27
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par triv69 Voir le message
    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
     
            public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel Acq)
            {
                 Console.WriteLine(Acq.Id.ToString("X") + " " +
                                    Acq.Data[0].ToString() + " " +
                                    Acq.Data[1].ToString() + " " +
                                    Acq.Data[2].ToString() + " " +
                                    Acq.Data[3].ToString() + " " +
                                    Acq.Data[4].ToString() + " " +
                                    Acq.Data[5].ToString() + " " +
                                    Acq.Data[6].ToString() + " " +
                                    Acq.Data[7].ToString() + " ");
                try
                {
                    if (demoThread == null)
                    this.demoThread.Start();
                }catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    Attention, je ne sais pas si tu nous as fourni le code complet de la méthode Fonction_ReceptionTrame, mais ici, il manque un appel à SetText(string text).

  8. #28
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    Bon, sans avoir tout le code, je pense que cela va être difficile. Tu peux nous mettre à disposition ton projet ?

    [EDIT]
    Bonne remarque de Zenzitone. A noter de plus que tu as une erreur sur ta conditionnelle pour le lancement de la tâche. Si elle est nulle, tu la lances !
    [/EDIT]
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Voici le code :

    Ceci est ce que je fais lors de la réception d'une trame. ReceptionTrame est de type Aquisition_CAN_Temps_Reel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                     ReceptionTrame.Id = (int)receivedEvent.tagData.can_Msg.id;
                     ReceptionTrame.Data = new byte[8];
                     for (int i = 0; i < 8; i++)
                          ReceptionTrame.Data[i] = receivedEvent.tagData.can_Msg.data[i];
     
                     EventReceptionTrame += Form.Fonction_ReceptionTrame;
                     if (EventReceptionTrame != null)
                     {
                           EventReceptionTrame(this, ReceptionTrame);
                           EventReceptionTrame = null;
                      }
    Ceci est pour la réception de l'évènement et la modification de la textBox
    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
     delegate void SetTextCallback(string text);
     
            private void SetText(string text)
            {
                if (this.tbx_Frame1.InvokeRequired)
                {
                    SetTextCallback d = new SetTextCallback(SetText);
                    this.Invoke(d, new object[] { text });
                }
                else
                {                
                    this.tbx_Frame1.Text = text;
                }
            }
     
            private void ThreadProcSafe()
            {
                this.SetText("Ca fonctionne");
            }
     
            public void Fonction_ReceptionTrame(object sender, Aquisition_CAN_Temps_Reel Acq)
            {
                Console.WriteLine(Acq.Id.ToString("X") + " " +
                                    Acq.Data[0].ToString() + " " +
                                    Acq.Data[1].ToString() + " " +
                                    Acq.Data[2].ToString() + " " +
                                    Acq.Data[3].ToString() + " " +
                                    Acq.Data[4].ToString() + " " +
                                    Acq.Data[5].ToString() + " " +
                                    Acq.Data[6].ToString() + " " +
                                    Acq.Data[7].ToString() + " ");
                try
                {
                    if (demoThread == null)
                    {
                        this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
                        this.demoThread.IsBackground = true;
                        this.demoThread.Start();
                    }
                }catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
           }
    Pour le moment je n'affiche que "ça fonctionne" mais l'objectif est bien sur d'afficher la trame.

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    C'EST BON !!!!!!!!!!! J'AI RÉUSSI !!!

    C'était dans la gestion de l'évènement que cela ne marchait pas. On appelait la fonction du Formulaire sans l'appeler depuis l'évènement. Je m'explique.

    J'ai tout d'abord créé une class AquisitionTrameEventArgs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class AquisitionTrameEventArgs : EventArgs
        {
            public Aquisition_CAN_Temps_Reel myEventAquisition { get; set; }
        }
    Ensuite, lors de la réception d'une trame, je lui ai transmit ma trame par myEventAquisition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (EventReceptionTrame != null)
              {
                     EventReceptionTrame(this, new AquisitionTrameEventArgs { myEventAquisition = ReceptionTrame });
                     EventReceptionTrame = null;
              }
    Puis, dans le formulaire, j'ai créé un Thread lorsque je lui demande de réceptionner les trames :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (demoThread == null)
                {
                    this.demoThread = new Thread(new ThreadStart(this.ThreadProcSafe));
                    this.demoThread.IsBackground = true;
                    this.demoThread.Start();
                }
    Enfin, dans le Thread, je lui lie la fonction avec l'évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (true)
                {
                    Thread.Sleep(20);
                    DriverVector.EventReceptionTrame += Fonction_ReceptionTrame;
                }
    Enfin, dans ma fonction, j'actualise ma TextBox :
    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
    private void Fonction_ReceptionTrame(object sender, AquisitionTrameEventArgs Acq)
            {
                Console.WriteLine(Acq.myEventAquisition.Id.ToString("X") + " " +
                                   Acq.myEventAquisition.Data[0].ToString() + " " +
                                   Acq.myEventAquisition.Data[1].ToString() + " " +
                                   Acq.myEventAquisition.Data[2].ToString() + " " +
                                   Acq.myEventAquisition.Data[3].ToString() + " " +
                                   Acq.myEventAquisition.Data[4].ToString() + " " +
                                   Acq.myEventAquisition.Data[5].ToString() + " " +
                                   Acq.myEventAquisition.Data[6].ToString() + " " +
                                   Acq.myEventAquisition.Data[7].ToString() + " ");
     
                this.Invoke((MethodInvoker)delegate
                {
                    tbx_Frame1.AppendText(Acq.myEventAquisition.Id.ToString("X") + " " +
                                   Acq.myEventAquisition.Data[0].ToString() + " " +
                                   Acq.myEventAquisition.Data[1].ToString() + " " +
                                   Acq.myEventAquisition.Data[2].ToString() + " " +
                                   Acq.myEventAquisition.Data[3].ToString() + " " +
                                   Acq.myEventAquisition.Data[4].ToString() + " " +
                                   Acq.myEventAquisition.Data[5].ToString() + " " +
                                   Acq.myEventAquisition.Data[6].ToString() + " " +
                                   Acq.myEventAquisition.Data[7].ToString() + "\r\n");
                });
            }
    Merci en tous cas pour votre aide à tous !

  11. #31
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 695
    Points
    10 695
    Billets dans le blog
    21
    Par défaut
    [QUOTE=triv69;9507887]C'EST BON !!!!!!!!!!! J'AI RÉUSSI !!![QUOTE]
    Bonne nouvelle !


    Citation Envoyé par triv69 Voir le message
    C'était dans la gestion de l'évènement que cela ne marchait pas. On appelait la fonction du Formulaire sans l'appeler depuis l'évènement. Je m'explique.
    Là, il faut que tu m'expliques : comment, en mettant un point d'arrêt, l'exécution pouvait s'arrêter sur une instruction qui au final n'était pas appelé ?

    Citation Envoyé par triv69 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (EventReceptionTrame != null)
              {
                     EventReceptionTrame(this, new AquisitionTrameEventArgs { myEventAquisition = ReceptionTrame });
                     EventReceptionTrame = null;
              }
    
    ...
    
    while (true)
                {
                    Thread.Sleep(20);
                    DriverVector.EventReceptionTrame += Fonction_ReceptionTrame;
                }
    Ca, ça piquote sérieusement les yeux . Pourquoi vider l'événement si c'est pour remettre un callback toute les 20ms dessus ?
    La première ligne en gras, tu la vires. La seconde, tu la positionnes avant la boucle while.

    [EDIT]
    En fait, ton code ne fait que plus que piquer les yeux. Car si on déplace l'ajout du callback avant la boucle while, la boucle while ne sert... à rien ! Donc autant la supprimer. Tu y gagneras énormément en clarté !!
    [/EDIT]
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  12. #32
    Futur Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2017
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2017
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Ok super merci François.
    Effectivement, ça me permet de faire un code plus propre

    Pour info, je développe du code en C# depuis peu pour une grande entreprise à Vénissieux (69). C'est un nouveau langage de programmation pour moi et je tenais aussi à remercier le responsable logiciel du site qui m'a aidé et fourni des sources logiciels permettant de résoudre mon problème de gestion d’événements.

    Voilà merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Continuum] Afficher les rapports générés par les plugins maven
    Par dferot dans le forum Intégration Continue
    Réponses: 4
    Dernier message: 14/11/2007, 17h25
  2. comment ne pas afficher les donnees transmis par un lien
    Par coucam dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 04/07/2007, 15h39
  3. Réponses: 4
    Dernier message: 01/03/2007, 15h24
  4. [img201.imageshack.us] impossible d'afficher les images
    Par Blossom dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 07/02/2007, 09h41
  5. Réponses: 2
    Dernier message: 11/12/2006, 15h14

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