2010-06-09 2 views
0

Une partie de mon programme nécessite une récupération de "drapeau", c'est-à-dire que j'obtiens une valeur True ou False, et deux valeurs pourraient suivre cette valeur de retour.(conditionnel) Gestionnaires d'événements multiples C#

1) Le drapeau est vrai, alias "allez-y", et je récupère les données d'une base de données.

2) Le drapeau est faux, et je veux empêcher les données d'être récupérées.

Maintenant, cette vérification doit être effectuée avant toute fonction qui ferait appel à la base de données en question. J'ai décidé d'implémenter cette vérification sous la forme d'un gestionnaire d'événements attaché aux objets GUI qui déclencherait cette demande de données.

Ce gestionnaire d'événements de contrôle est appelé d'abord sur les événements nécessaires, et ma question est:

Comment puis-je arrêter des gestionnaires d'événements ultérieurs de mise à feu si le gestionnaire d'événements FIRST (mon drapeau en damier) vient de faux?

Merci

+1

Pouvez-vous mettre le code en question? – Oded

+0

Cela ressemble vaguement à quelque chose qui pourrait être résolu avec une solution de mise en cache. –

Répondre

0

Vous ne pouvez pas arrêter l'exécution des événements. Il suffit de placer la vérification devant la fonction de requête de données pour qu'elle soit appelée chaque fois que des données sont demandées.

+0

Il y a BEAUCOUP d'endroits qui auraient besoin de cette vérification, c'est pourquoi je me suis penché vers l'ajout des événements pour minimiser le copier/coller. Existe-t-il une autre façon d'accomplir ce que j'essaie de faire sans ajouter cette vérification dans les nombreux endroits où ils doivent être placés? Merci! – gjk

+0

Vous avez juste besoin d'insérer une opération au milieu. Si vous avez une classe qui gère la mise à jour de la base de données, elle peut avoir un gestionnaire d'événement on click ainsi qu'un événement OnDatabaseUpdate. Lorsqu'un clic est effectué sur un contrôle, il peut effectuer la validation et déclencher l'événement OnDatabaseUpdate de manière sélective. Est-ce ce que vous essayez d'accomplir? –

0

On dirait que ce que vous recherchez est plus le long d'un mutex que d'un drapeau. Je ne crois pas que vous puissiez définir explicitement l'ordre des événements manipulés.

2

Votre conception rencontre un problème en fonction du mécanisme d'événement. En fait, vous n'avez aucune garantie que le premier gestionnaire sera appelé avant les autres. Donc, même si vous pouviez tirer un et pas les autres, vous ne pouviez pas dépendre de l'ordre dans lequel ils sont appelés.

Vous devrez effectuer la vérification avant de déclencher l'événement.

+0

+1 pour le déclenchement non déterministe de l'explication du délégué multidiffusion – Marc

0

ont un autre drapeau qui détermine une condition fausse et si oui, ne laissez pas la méthode exécutée, ont également changé le drapeau à vrai chaque fois une zone de texte etc est mis à jour