-4

我试图在我的程序结束时取消注册事件处理程序。看起来像这样 -

myobject.EventHandler -= new MyEventHandler(MyMethod);

现在,我注意到在某些条件下,这条语句会被执行多次。该程序似乎按预期工作,但我想确认它没有做一些奇怪的事情。

当处理程序第一次被注销时,object.EventHandler 被设置为 NULL。那么这条语句可以多次执行吗?

谢谢

4

2 回答 2

1

我同意你应该研究为什么代码被执行多次而它应该只执行一次的评论,特别是因为它被执行的次数不同(根据你的描述)。

我猜这是来自asp.net?如果是这样,您需要小心某些控件上的 autopostback 属性,当触​​发某些事件时,可能会触发父控件事件。我之所以从 asp.net 猜测这是因为您说“有时”,因此当不使用按钮或文本框之类的控件时,它的行为可能“正常”。虽然这只是纯粹的猜测,因为您的问题缺乏细节......

于 2014-09-06T14:33:17.593 回答
1

当处理程序第一次被注销时,object.EventHandler 被设置为 NULL。那么这条语句可以多次执行吗?

是的,没关系。它只是不会做任何事情。

顺便说一句,您不需要显式创建委托,您可以这样做:

myobject.EventHandler -= MyMethod;

(除非您仍在使用 C# 1,这在 2014 年似乎不太可能......)

于 2014-09-06T13:12:00.837 回答