【发布时间】:2009-07-01 14:45:52
【问题描述】:
我在代码中有一个事件处理程序,当我期望它只被调用一次时,我看到它被多次调用。
过去这是因为我在错误的位置定义了委托(因此更多的一个委托被添加到事件处理列表中),但在这种情况下,这只被设置一次(在类构造函数中) .
与其继续手动搜索我的代码以查找错误,我是否可以采取一种(简单)实用的方法来确定事件处理程序的分配位置?
【问题讨论】:
标签: c# event-handling
我在代码中有一个事件处理程序,当我期望它只被调用一次时,我看到它被多次调用。
过去这是因为我在错误的位置定义了委托(因此更多的一个委托被添加到事件处理列表中),但在这种情况下,这只被设置一次(在类构造函数中) .
与其继续手动搜索我的代码以查找错误,我是否可以采取一种(简单)实用的方法来确定事件处理程序的分配位置?
【问题讨论】:
标签: c# event-handling
你可以替换默认的:
public event EventHandler MyEvent;
...与
private EventHandler _myEvent;
public event EventHandler MyEvent
{
add { _myEvent += value; }
remove { _myEvent -= value; }
}
然后您可以在添加/删除函数中放置日志记录或断点并查看调用堆栈。
【讨论】:
如果您使用的是 vb.net,那么您确定您没有在方法中添加处理程序并且还使用了 handles 关键字?
这会导致一个事件被处理两次。
【讨论】:
安装Resharper,然后右键单击您的活动并选择“查找用法”。
【讨论】:
我有一个代码。它的 2 个类用于帮助访问事件
并在我的代码中介绍这个:
alt text http://img440.imageshack.us/img440/1656/featurer.jpg
现在可以调试进入的事件
CSoft.Core.EventHelper.Raise();
【讨论】:
您可以更改名称(不使用 Visual Studio 重构工具,只需在代码中更改名称)并查看编译器中断的位置。
【讨论】: