分离事件(C#)

时间:2013-06-25 16:42:49

标签: c# events event-handling

我在从事件中正确分离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>

1 个答案:

答案 0 :(得分:6)

您正在钩子中创建一个新的EventHandler并取消挂钩方法。所以你没有附加OnButtonClick,而是附上它的包装。

将您的钩子方法更改为:

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

您的其余代码仍然有效,您的事件现在应该正常启动。