.NET事件处理程序管理

Mar*_*per 5 c# event-handling

我在代码中有一个事件处理程序,当我期望它只被调用一次时,我看到它被多次调用.

在过去,这是因为我已经将委托定义在错误的位置(所以更多的是将一个委托添加到事件处理列表中),但是在这种情况下,这只会被设置一次(在类构造函数中).

而不是继续手动搜索我的代码寻找错误,我可以采取(简单)实用的方法来确定事件处理程序的分配位置?

Rog*_*mbe 18

您可以替换默认值:

public event EventHandler MyEvent;
Run Code Online (Sandbox Code Playgroud)

...用

private EventHandler _myEvent;

public event EventHandler MyEvent
{
    add { _myEvent += value; }
    remove { _myEvent -= value; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以在添加/删除函数中放置日志记录或断点,并查看调用堆栈.