有时候我想附加一个事件处理程序,但我不确定我是否已经完成了该事件。我的解决方法是使用 - =删除它,然后使用+ =添加它。还有更好的方法吗?
编辑:我想确保不做两次(或更多次)的原因是,如果我这样做,它会被解雇两次(或更多次)
答案 0 :(得分:1)
删除事件然后添加事件的解决方案可能会在多线程场景中爆炸,您可以有效地最终添加重复项或排除异常。
您可以在活动中实施add and remove,但这有其自身的警告。
如果你真的只需要一个强制转换类型的动作,你可以考虑只传递一个Action并在需要时调用它,这可以节省你在事件中遇到的一些困难边缘情况。
答案 1 :(得分:0)
你试过这个:
public event MyClickHandler Click = delegate {}; // add empty delegate!
答案 2 :(得分:0)
所以,我假设你不能控制引发事件的类,你不能在那里检查它。如果您需要运行时检查您是否已经在水槽侧注册了一个事件,您可以将注册集中在一个检查您是否已经注册的方法中,例如......
private void RegisterForEvent()
{
lock( _registerLock )
{
if( !_iveDoneThisAlready )
{
_iveDoneThisAlready = true;
// register for Event here
}
}
}
但是,您的代码必须同意该约定。没有任何事情迫使注册人调用此方法而不是+ =。