2010-06-03 9 views
1

J'ai un cas où je veux qu'un événement donné s'exécute une fois, et seulement une fois. J'essaie de le faire de cette façon, mais j'ai des prolèmes (sinon je ne le demanderais pas). Notez que le code suivant est à l'intérieur de la fonction qui décide que l'événement doit être déclenché.Faire un feu d'événement C#/wpf une seule fois?

EventHandler h = delegate(Object sender, EventArgs e) { 
    FiringControl.TheEvent -= h; // <-- Error, use of unassigned local variable "h" 
    // Do stuff 
} 
FiringControl.TheEvent += h; 

En général, cela devrait fonctionner en raison de la portée est ainsi préservée pour les délégués qu'après qu'ils font courir, mais, depuis h est en train d'être construit lorsque je tente de l'utiliser, il est toujours considéré comme être "non initialisé", apparemment.

+0

http://stackoverflow.com/questions/1554845/am-i-usage-la-right-approach-to-monitor-the-tasks-i-want-to-perform-when-a-handl/1554978 # 1554978 – Juliet

Répondre

3

Vous pouvez définir h = null en premier, puis le définir comme égal à autre chose? Comme ça?

EventHandler h = null; 

h = delegate(Object sender, EventArgs e) { 
    FiringControl.TheEvent -= h; // <-- Error, use of unassigned local variable "h" 
    // Do stuff 
} 

FiringControl.TheEvent += h; 

Mais êtes-vous sûr que c'est la bonne approche? Qu'essayez-vous de faire globalement?

+0

Oui, ça fonctionne parfaitement. Je l'avais juste compris et je revenais pour supprimer la question, mais je suppose que je ne le ferai pas maintenant. ;) – Donnie

+0

En ce qui concerne ce que je fais, je suis temporairement dans 'TheEvent' pour potentiellement annuler une autre opération. Le «problème» est que plusieurs d'entre elles peuvent se produire à la fois, donc j'abuse de la liaison locale avec les délégués pour éviter d'avoir à en dresser une liste. – Donnie

Questions connexes