分离事件(C#)

Col*_*ton 3 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);
}
Run Code Online (Sandbox Code Playgroud)

在主要:

UIButton button = new Button();
button.HookEvent(OnButtonClick);
button.UnhookEvent(OnButtonClick);
Run Code Online (Sandbox Code Playgroud)

被挂钩的功能:

public void OnButtonClick(object sender, EventArgs e)
{
    throw new Exception("Event Fired");
}
Run Code Online (Sandbox Code Playgroud)

使用这个,如果我注释掉Unhook行,它会正确通过并调用Exception.但是,如果我按照上面所示离开它,Unhook仍然存在......功能仍然会触发.它并没有解开它.如果我Click = null;在该Click -= new EventHandler(action);部分下面添加,那么它按预期工作.这样做只会导致在任何给定时间允许挂钩一个函数.

我唯一想到的可能是因为我正在使用Action <>,因此传入了新版本的函数,但是我甚至尝试将该函数存储为按钮内的变量,当我去删除它时,if(storedAction == passedInAction)结果是真的.我不知道为什么这不会让我脱离.

谢谢你的时间!

Joe*_*nos 6

你正在创建一个新EventHandler的钩子和解钩方法.所以你没有附加OnButtonClick,而是围绕它的包装.

将您的钩子方法更改为:

public void HookEvent(EventHandler action) {
    Click += action;
}
public void UnhookEvent(EventHandler action) {
    Click -= action;
}
Run Code Online (Sandbox Code Playgroud)

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