2010-10-26 7 views
1

Je travaille sur un code axé sur les événements. Dans l'un des composants de mon système, un événement arrive parfois que je n'ai pas de gestionnaire pour le moment. Est-il possible de faire attendre l'événement jusqu'à ce qu'un gestionnaire soit disponible?C# faire un événement attendre

Merci,

PM

+0

Devez-vous encore implémenter l'événement? Ou est-il assigné au gestionnaire plus tard? Si le gestionnaire est affecté plus tard, pourquoi n'essayez-vous pas d'assigner le gestionnaire avant l'appel? – Entity

+0

désolé, permettez-moi de ré-expliquer: l'événement E arrive. J'ai seulement 1 classe C qui peut gérer E, mais à ce moment il n'y a pas d'instance active de la classe, donc quand E est levé, il ne voit aucun abonné et rien ne se passe. Existe-t-il un moyen de gérer E dès qu'une instance de C est créée? – user472875

Répondre

3

Il n'y a aucun mécanisme intégré en C# pour faire la queue des événements et de les envoyer en tant que gestionnaires sont attachés. Les événements sont déclenchés de manière synchrone lorsqu'une activité intéressante se produit ... "attendre" un gestionnaire nécessiterait le blocage du processus.

Vous pouvez implémenter votre propre file d'attente d'événements en fournissant un custom implementation of the event member dans votre classe. Vous auriez besoin d'une structure de données distincte pour mettre en cache des informations sur les événements précédemment "déclenchés" et les mettre en file d'attente lorsqu'un gestionnaire les attache.

Le problème avec le schéma ci-dessus, c'est que bien qu'il soit possible, il est très inhabituel et un peu confus. La plupart des développeurs ne s'attendent pas à ce que les événements soient déclenchés de cette manière. Il est également compliqué par le fait que si un grand nombre d'événements se produisent sans un gestionnaire attaché, vous pourriez finir par utiliser une quantité importante de mémoire pour stocker les événements qui ne seront jamais distribués. Personnellement, je conseillerais généralement d'éviter une telle conception.

Questions connexes