2014-09-06 66 views
-4

我想在程序结束时取消注册事件处理程序。它看起来像这样 -从空控件取消注册事件处理程序

myobject.EventHandler -= new MyEventHandler(MyMethod); 

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

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

感谢

+4

我想你在这里问错了问题。你的程序执行多次,而它只应执行一次。找出它为什么会这样并解决这个问题不是更好吗? – Matthijs 2014-09-06 13:11:19

+1

“在我的程序结束时”你不需要退订任何东西。 – 2014-09-06 13:13:23

回答

1

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

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

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

myobject.EventHandler -= MyMethod; 

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

+0

那好吗? – 2014-09-06 13:12:37

+0

@HenkHolterman,你是什么意思?为什么它不是好的? – 2014-09-06 13:13:58

+0

显然,理解为什么执行多次会更好......但是本身多次取消订阅并没有不良影响。 – 2014-09-06 13:14:57

1

我同意你应该看看为什么代码被执行多次,而它应该只执行一次,尤其是因为它执行了多少次(根据你的描述)。

我想这是从asp.net?如果是这样,你需要注意一些控件上的autopostback属性,这些控件在触发某些事件时可能触发父控件事件。之所以我猜这是否来自asp.net,是因为你说'有时',因此当像按钮或文本框的控制不使用它可能表现'正常'。虽然这只是纯粹的猜测,因为你的问题是缺乏细节...

相关问题