在C#中清除或检查事件处理程序

use*_*886 3 c#

我有一些C#代码可以更新对象的某些属性.我定义了一个事件处理程序,以帮助我在更新过程完成时做出响应.不幸的是,我已经了解到这个事件多次被解雇.我怀疑这种情况正在发生,因为事件处理程序正在错误的时间设置.目前,它的设置如下:

myObject.Update_Succeeded += new EventHandler(myObject_Update_Succeeded);
Run Code Online (Sandbox Code Playgroud)

由于代码的复杂性,我很难跟踪它应该设置的位置.我想只设置它之前没有设置的事件处理程序.因此,我想做这样的事情:

ClearEventHandlers(myObject);
Run Code Online (Sandbox Code Playgroud)

要么

myObject.Update_Succeeded = null;
myObject.Update_Succeeded += new EventHandler(myObject_Update_Succeeded);
Run Code Online (Sandbox Code Playgroud)

有没有办法完成我正在尝试的东西?

谢谢!

Cod*_*ked 6

是的,您可以自定义事件的添加/删除访问者.本文介绍了这些访问器.但你可以这样做:

class MyClass
{
    private EventHandler _myEvent;

    public event EventHandler MyEvent
    {
        [MethodImpl(MethodImplOptions.Synchronized)]
        add 
        { 
            _myEvent = (EventHandler)Delegate.Combine(_myEvent, value);
        }
        [MethodImpl(MethodImplOptions.Synchronized)]
        remove 
        { 
            _myEvent = (EventHandler)Delegate.Remove(_myEvent, value); 
        }
    }

    public void ClearMyEvent() {
        _myEvent = null;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)