3

我有一个从事件中正确分离 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 = null;在该部分下方添加Click -= new EventHandler(action);,则它按预期工作。这样做会导致在任何给定时间只允许一个函数被挂钩。

我唯一想到可能发生的事情是,自从我使用 Action<> 以来,正在传入该函数的新版本,但可惜我什至尝试将该函数作为变量存储在按钮内,当我去删除它时,if(storedAction == passedInAction)结果为真。我不知道为什么这对我来说不会分离。

谢谢你们的时间!

4

1 回答 1

6

您正在EventHandler钩子和取消钩子方法中创建一个新的。所以你不是在附加OnButtonClick,而是在它周围的一个包装器。

将您的钩子方法更改为:

public void HookEvent(EventHandler action) {
    Click += action;
}
public void UnhookEvent(EventHandler action) {
    Click -= action;
}

您的其余代码应该仍然可以工作,并且您的事件现在应该可以正常触发。

于 2013-06-25T16:49:23.247 回答