我在从事件中正确分离EventHandler时遇到了一个小问题。以下是我的工作内容:
在UIButton:
public void HookEvent(Action<object, EventArgs> action)
{
Click += new EventHandler(action);
}
public void UnhookEvent(Action<object, EventArgs> action)
{
Click -= new EventHandler(action);
}
在Main:
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 = null;
部分下方添加Click -= new EventHandler(action);
,那么它会按预期工作。这样做只会导致在任何给定时间都挂钩一个函数。
我唯一想到的可能是因为我正在使用Action&lt;&gt;来传递新版本的函数,但是我甚至尝试将该函数存储为按钮内的变量,当我去除它,if(storedAction == passedInAction)
导致真实。我不知道为什么这不会让我脱离。
感谢您的时间![/ p>
答案 0 :(得分:6)
您正在钩子中创建一个新的EventHandler
并取消挂钩方法。所以你没有附加OnButtonClick
,而是附上它的包装。
将您的钩子方法更改为:
public void HookEvent(EventHandler action) {
Click += action;
}
public void UnhookEvent(EventHandler action) {
Click -= action;
}
您的其余代码仍然有效,您的事件现在应该正常启动。