C# .NET事件处理程序管理

C# .NET事件处理程序管理,c#,event-handling,C#,Event Handling,我看到代码中有一个事件处理程序被多次调用,而我希望它只被调用一次 在过去,这是因为我在错误的位置定义了委托(因此更多的委托被添加到事件处理列表中),但是在这个事件中,这只被设置一次(在类构造函数中) 有没有一种(简单)实用的方法可以用来找出事件处理程序的分配位置,而不是继续手动搜索我的代码以查找错误?您可以替换默认值: public event EventHandler MyEvent; …与 private EventHandler _myEvent; public event Event

我看到代码中有一个事件处理程序被多次调用,而我希望它只被调用一次

在过去,这是因为我在错误的位置定义了委托(因此更多的委托被添加到事件处理列表中),但是在这个事件中,这只被设置一次(在类构造函数中)


有没有一种(简单)实用的方法可以用来找出事件处理程序的分配位置,而不是继续手动搜索我的代码以查找错误?

您可以替换默认值:

public event EventHandler MyEvent;
…与

private EventHandler _myEvent;

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

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

如果您使用的是vb.net,那么您确定没有在方法中添加处理程序,也没有使用handles关键字吗


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

安装,然后右键单击事件并选择“查找用法”。

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

在我的代码中介绍:

现在,您可以调试输入的事件

CSoft.Core.EventHelper.Raise();

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

好主意,但这同样侧重于手动搜索。我也在用C#。无论如何,谢谢。我很想去,但我没有执照也没有预算:-(我想说它在大约一个月内就可以自己付钱了。我永远不会接受没有(或类似的东西)的工作再一次。这是一个非常简单和简洁的解决方案-就像一个符咒。谢谢。好建议,但罗杰斯的定制存取器的想法非常简单,就像一个符咒。谢谢你的输入。马克