.NET事件处理程序管理

时间:2009-07-01 14:45:53

标签: c# event-handling

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

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

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

5 个答案:

答案 0 :(得分:18)

您可以替换默认值:

public event EventHandler MyEvent;

...与

private EventHandler _myEvent;

public event EventHandler MyEvent
{
    add { _myEvent += value; }
    remove { _myEvent -= value; }
}

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

答案 1 :(得分:1)

如果您使用的是vb.net,那么您确定不是在方法中添加处理程序而是使用handle关键字吗?

这会导致事件被处理两次。

答案 2 :(得分:1)

安装Resharper,然后右键点击您的活动并选择“查找用户”。

答案 3 :(得分:1)

我有一个代码。它的2个类用于帮助访问事件

Event Classes

在我的代码中介绍了这个:

alt text http://img440.imageshack.us/img440/1656/featurer.jpg

现在您可以调试在

中输入的事件
CSoft.Core.EventHelper.Raise();

答案 4 :(得分:0)

您可以更改名称(不使用Visual Studio重新分解工具,只需更改代码中的名称)并查看编译器中断的位置。