删除事件但仍然开火

时间:2009-03-25 02:01:50

标签: c# winforms events

我有一个奇怪的错误,一个不受欢迎的事件被解雇。我可以跟踪代码并看到使用 - =语法删除“onRowLeave”事件处理程序,然后更改DataSource的下一行导致“OnRowLeave”处理程序触发!

所以似乎删除工作无效。

我可以告诉它不会再以某种方式被添加,因为我在所有添加了+ =的地方都有一个断点而且它没有击中那些。

我在想,也许它会被添加两次而且只被移除一次......会导致它吗?有什么办法可以在调试器中看到处理程序吗?

2 个答案:

答案 0 :(得分:1)

- >>我想也许它被添加两次并且只被移除一次......就是这样 因为它?

这是正确的。

- >>有什么办法可以在调试器中看到处理程序吗?

我认为这是不可能的。此外,如果您不知道添加事件处理程序的次数,则将其取消并不是一项简单的任务。我认为你可以用反射来达到这个目的。

我建议您研究代码,并了解哪里为什么您有多个事件注册,以便您可以根据需要手动删除它们。

(您可能需要注意(正如nobugz所建议的),OnRowLeave是DataGridView的一个方法而不是一个事件。此方法不向用户公开,而是负责引发RowLeave事件用户可以陷阱。我不太清楚为什么你使用术语OnRowLeave)

答案 1 :(得分:0)

当我遇到像这样的延迟事件处理程序问题时,我通常会提供自己的事件添加/删除方法,并在我自己的容器中跟踪事件处理程序以及其他调试数据(如果看起来有用)。这允许在调试器中检查集合,如果它为以这种方式添加的每个事件关联System.Diagnostics.StackTrace对象,则附加数据非常有用。