我在正确地从事件中分离EventHandler时遇到了一个小问题。以下是我正在使用的内容:
在UIButton中:
public void HookEvent(Action<object, EventArgs> action)
{
Click += new EventHandler(action);
}
public void UnhookEvent(Action<object, EventArgs> action)
{
Click -= new EventHandler(action);
}
主要:
UIButton button = new Button();
button.HookEvent(OnButtonClick);
button.UnhookEvent(OnButtonClick);
被钩住的功能:
public void OnButtonClick(object sender, EventArgs e)
{
throw new Exception("Event Fired");
}
如果我注释掉Unhook行,则使用此方法,它将正确通过并调用Exception。然而,如果我把它留在上面显示的Unhook仍然在那里。。。该函数仍然会启动。如果我在Click -= new EventHandler(action);
部分下面添加Click = null;
,那么它就可以正常工作。这样做的结果是在任何给定的时间只允许挂接一个函数。
我对可能发生的事情的唯一想法是,由于我正在使用Action<>,因此正在传递该函数的新版本,但遗憾的是,我甚至尝试将该函数作为变量存储在按钮中,当我删除它时,if(storedAction == passedInAction)
会导致true。我不知道为什么它不会为我分离。
谢谢你们抽出时间,伙计们!
您正在挂钩和取消挂钩方法中创建一个新的EventHandler
。所以你不是在附加OnButtonClick
,而是在它周围加一个包装
将挂钩方法更改为:
public void HookEvent(EventHandler action) {
Click += action;
}
public void UnhookEvent(EventHandler action) {
Click -= action;
}
您的代码的其余部分应该仍然可以工作,并且您的事件现在应该正常启动。