【问题标题】:Make a c# / wpf event fire only once?只触发一次 c#/wpf 事件?
【发布时间】:2011-02-27 10:33:39
【问题描述】:

我有一个案例,我希望给定事件执行一次,而且只执行一次。我正在尝试这样做,但我遇到了问题(否则我不会问)。请注意,以下代码位于决定需要触发事件的函数内部。

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

一般来说,这应该可以工作,因为在代表完成运行之前为代表保留范围的方式,但是,由于 h 在我尝试使用它时正在构建过程中,它仍然被认为是显然是“未初始化”。

【问题讨论】:

标签: c# wpf delegates


【解决方案1】:

您可以先设置 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;

但是您确定这是正确的方法吗?您总体上想做什么?

【讨论】:

  • 是的,这很完美。刚刚弄清楚并回来删除问题,但我想我现在不会。 ;)
  • 至于我在做什么,我暂时挂接到TheEvent 以可能取消另一个操作。 “问题”是可能同时发生多个此类事件,因此我滥用与委托的本地范围绑定以避免维护这些列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多