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)结果是真的.我不知道为什么这不会让我脱离.
谢谢你的时间!
你正在创建一个新EventHandler的钩子和解钩方法.所以你没有附加OnButtonClick,而是围绕它的包装.
将您的钩子方法更改为:
public void HookEvent(EventHandler action) {
Click += action;
}
public void UnhookEvent(EventHandler action) {
Click -= action;
}
Run Code Online (Sandbox Code Playgroud)
您的其余代码仍然有效,您的事件现在应该正常启动.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |