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 :

Question sur les évènements


Sujet :

C#

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut Question sur les évènements
    Bonsoir tout le monde,

    je viens vers vous pour résoudre un problème qui me prend bien la tête je dois l'avouer. Mon problème porte sur les évènements. Tout d'abord voila mon 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
     
    public class Myclass
    {
       public delegate void DTest();
       public event DTest EvenementTest;
     
       ....
     
       public void Test()
       {
          ...
          ...
          EvenementTest();
       }
    }
    Comme vous pouvez le voir, mon objet déclenche un évènement à l'appel de la procédure Test. Mon problème est qu'il se peut, au sein même de mon application, que cet évènement ne soit pas écouté. Et cela a l'air de poser un problème.

    D'ou ma question : est-il possible de déclencher un événement en C# sans que celui-ci soit écouté ?

    Je vous remercie pour votre aide
    Cordialement
    Finality

  2. #2
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    Essaye ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(EvenementTest != null)
       EvenementTest();

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Points : 1 057
    Points
    1 057
    Par défaut
    salut The_badger_man,

    je tiens à te remercier énormément !!!!!!! Tu me sors une énorme épine du pied. Je débute juste avec le C# (on est censé apprendre que le VB en BTS) et je développe une application en WCF. Tu t'imagines donc le nombre de problèmes que je rencontre à la minute ^^

    Je te remercie énormément pour ton aide, et par la même occasion te souhaite un très bon noël et fêtes, ainsi qu'à tous les gens sur ce forum qui donnent de leur temps pour aider les autres .

    Merci à vous tous et bonnes fêtes

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Le pattern habituel est le suivant :
    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
    class Machin
    {
      public event EventHandler TonEvenement;
      protected virtual void OnTonEvenement(EventArgs e)
      {
        if (TonEvenement != null)
          TonEvenement(this, e);
      }
     
      private void f();
      {
       ....
       OnTonEvenement(EventArgs.Empty);
       ....
      }
    }
    Quelques points qui melangent lq syntqxe et les conventions (i.e. ce qui n'est pas obligatoire, mais utilise partout dans le framework, par exemple dans les WinForms) :
    • Pour chaque evenement de la classe, on cree une methode OnMachin qui est la seule a effectivement executer l'event.
    • Cette methode est virtuelle et protegee pour que les descendants n'aient pas a s'abonner a l'event pour etre tenus au courant des modifs ; il suffit juste d'overrider la methode OnMachin pour cela.
    • Les events sont tous du type void (object sender, XXXEventArgs e), ou XXXEventArgs est une classe derive de System.EventArgs. sender est l'emetteur de l'event, e les données de l'event. Dans mon exemple, comme l'event ne porte pas d'info complementaire, j'utilise directement un EventArgs vierge qui ne porte pas d'info. EventHandler est un delegate de type (object sender, EventArgs e).
    • La methode OnMachin doit verifier d'abord si l'event associe est nul ou pas. S'il est nul, son exceution lancerait une NullreferenceException.

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

Discussions similaires

  1. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  2. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38
  3. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45
  5. question sur les message box !
    Par krown dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2002, 16h11

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