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 :

Thread et Evenements


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    agh
    agh est déconnecté
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Par défaut Thread et Evenements
    Bonsoir à tous,

    Mon problème est simple, et pourtant je bloque :

    J'ai un thread principal, qui lance un autre thread :

    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 event EventHandler usbLecture;
     
    public Usb()
    {
       threadDetection = new Thread(new ThreadStart(lire));
       threadDetection.Start();
     
       // ...
    }
     
    private void lire()
    {
       while (Thread.CurrentThread.IsAlive)
       {
          Thread.Sleep(500);
     
           // traitement
     
           OnUsbLecture(new EvtUsb (EventArgs.Empty));
       }
    }
    Le thread se lance bien, le traitement s'effectue, mais au moment de déclencher l'évenement que voici :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected virtual void OnUsbLecture(EventArgs e)
    {
       SensChange(this, e);
    }
    J'ai un NullReferenceException au niveau de SensChange (this, e)

    Pourriez-vous m'aider ?
    J'imagine que ça a avoir avec les thread, parce que j'utilise tout le temps les évenements, mais au sein d'un même thread...

    Je vous remercie beaucoup.
    Alexis

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Ca a juste avoir avec le fait que tu n'es pas abonné à l'événement et que tu ne déclenches pas l'événement comme il faut. Regarde cet exemple de la MSDN pour voir comment bien procéder

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Ca a juste avoir avec le fait que tu n'es pas abonné à l'événement et que tu ne déclenches pas l'événement comme il faut. Regarde cet exemple de la MSDN pour voir comment bien procéder
    Effectivement... Pour compléter : s'il n'y a aucun handler abonné à l'évènement SensChange, alors le delegate SensChange vaut null, donc tu obtiens une NullReferenceException si tu essaies de l'invoquer.

    La technique habituelle pour déclencher un évènement est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public event EventHandler MyEvent;
     
    protected virtual void OnMyEvent()
    {
        EventHandler handler = MyEvent;
        if (handler != null)
            handler(this, EventArgs.Empty);
    }
    (pour une explication sur la variable temporaire "handler", regarde cet article)

    Sinon, juste une petite remarque : fais attention aux noms que tu donnes à tes méthodes et évènements, parce que là on y comprend pas grand chose ... Tu déclares un évènement usbLecture, mais la méthode OnUsbLecture déclenche un autre évènement qui s'appelle SensChange

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Histoire de compléter aussi, une autre façon de faire et d'utiliser une méthode anonyme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public event EventHandler MyEvent = delegate { };
     
    protected virtual void OnMyEvent()
    {
        MyEvent (this, EventArgs.Empty);
    }
    MyEvent ne sera jamais null de cette manière.

  5. #5
    agh
    agh est déconnecté
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 51
    Par défaut
    Merci pour vos réponses.

    Ca marche.

    Et oui, désolé, je m'étais trompé dans mon message il fallait bien sur lire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected virtual void OnUsbLecture(EventArgs e)
    {
       usbLecture (this, e);         
    }
    ...
    Merci encore !

    Alexis

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

Discussions similaires

  1. Classe gestion de thread - Capter evenement stop
    Par sone47 dans le forum Threads & Processus
    Réponses: 3
    Dernier message: 14/12/2012, 12h05
  2. Comment arreter un thread suite à un evenement?
    Par zwan.bourg dans le forum C#
    Réponses: 5
    Dernier message: 01/08/2007, 11h11
  3. Thread et evenement
    Par Drikcé dans le forum Delphi
    Réponses: 3
    Dernier message: 12/10/2006, 16h59
  4. [C#] Comment une thread peut-elle attendre un evenement?
    Par legillou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 03/07/2006, 15h58
  5. Evenement de resume dans un Thread
    Par rvzip64 dans le forum Delphi
    Réponses: 2
    Dernier message: 14/06/2006, 09h24

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