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

Framework .NET Discussion :

Les événement sont-ils synchrones ?


Sujet :

Framework .NET

  1. #1
    Expert confirmé
    Les événement sont-ils synchrones ?
    Bonjour,

    Voici une partie de 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
    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
    namespace MonApp
    {
      public delegate void ClasseEvtEventHandler(object sender, ClasseEvtEventArg e);
     
      public class ClasseEvt
      {
        public event ClasseEvtEventHandler PLCEvt;
     
        ...
        private void scanPLC_Elapsed(object sender, ElapsedEventArgs e)
        {
          ...
          CreateEvtConfig(res);
          ...
        }
     
        private void CreateEvtConfig(string source)
        {
          EvtConfig evtConfig = new EvtConfig("evtConfig");
          ...
     
          OnPLCEvt(new ClasseEvtEventArg(EvtConfig));
          ....
        }
     
     
        public void OnPLCEvt(ClasseEvtEventArg e)
        {
          PLCEvt(this, e);
        }  
      }
     
      public class ClasseEvtEventArg : System.EventArgs
      {
        public Config EvtPLC;
        public ClasseEvtEventArg(Config arg)
        {
          EvtPLC =  arg;
        }
     
      }
     
      public class ReceptEvt
      {
        private ClasseEvt clsEvt;
     
        // quelque part dans le contructeur
          clsEvt = new ClasseEvt();
          clsEvt.PLCEvt += new ClasseEvtEventHandler(clsEvt_PLCEvt);
     
     
        private void clsEvt_PLCEvt(object sender, ClasseEvtEventArg e)
        {
          Mon Traitement
        }
      }
    }


    Tout ça pour dire que pour sortir de la fonction CreateEvtConfig il faut que je soit sorti de clsEvt_PLCEvt.
    Je pensais que ClasseEvt "balancait" l'événement à tous ses abonnés et continuait son chemin sans attendre que les abonnés aient fini le travail.

    Est-ce que j'ai mal compris la notio d'évément ou ai-je mal implémenté l'évenement ?

    Merci.

  2. #2
    Membre éprouvé
    Salut,

    Effectivement un appel d'évenement est synchrone, c'est a dire que toute les méthodes enregistrées sont exécutées par le thread appelant.
    Maintenant si tu veux que les traitements des abonnés soient fait de manière asynchrone, soit l'abonné lui même enregistre un méthode qui lance un traitement asynchrone et retourne immédiatement (et alors tous les traitements seront fait en parallele), soit tu fais appeler l'évènement par un autre thread (et là les traitements seront sérialisés mais ne bloqueront pas le thread appelant).

###raw>template_hook.ano_emploi###