2010-06-03 160 views
1

我有一个情况,我想要一个给定的事件执行一次,只有一次。我试图这样做,但我有问题(否则我不会问)。请注意,以下代码位于决定需要触发事件的函数内部。使c#/ wpf事件只触发一次?

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

一般来说,这应该的,因为范围保存代表,直到后他们就完成了运行方式工作,但由于h是正在兴建的过程中,当我尝试使用它,它仍然被认为是显然是“未初始化”。

+0

http://stackoverflow.com/questions/1554845/am-i-using-the-right-approach-to-monitor-the-tasks-i-want-to-perform-when-a-handl/1554978 #1554978 – Juliet 2010-06-03 18:39:56

回答

3

您可以先设置h = null,然后将其设置为等于其他值?喜欢这个?

EventHandler h = null; 

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

FiringControl.TheEvent += h; 

但是你确定这是正确的做法吗?你想要做什么整体?

+0

是的,这是完美的作品。刚刚发现并回来删除问题,但我想我现在不会。 ;) – Donnie 2010-06-03 17:32:07

+0

至于我在做什么,我暂时挂钩'TheEvent'可能会取消另一个操作。 “问题”是可能有多个这样的情况发生,所以我滥用本地作用域绑定与代表,以避免必须维护这些列表。 – Donnie 2010-06-03 17:33:59