正在分离事件(C#)



我在正确地从事件中分离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 -= new EventHandler(action);部分下面添加Click = null;,那么它就可以正常工作。这样做的结果是在任何给定的时间只允许挂接一个函数。

我对可能发生的事情的唯一想法是,由于我正在使用Action<>,因此正在传递该函数的新版本,但遗憾的是,我甚至尝试将该函数作为变量存储在按钮中,当我删除它时,if(storedAction == passedInAction)会导致true。我不知道为什么它不会为我分离。

谢谢你们抽出时间,伙计们!

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

将挂钩方法更改为:

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

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

最新更新