我想在程序结束时取消注册事件处理程序。它看起来像这样 -从空控件取消注册事件处理程序
myobject.EventHandler -= new MyEventHandler(MyMethod);
现在,我注意到,在某些条件下,这个语句被执行多次。该程序似乎按预期工作,但我想确认它没有做出奇怪的事情。
当处理程序未注册时,第一次将object.EventHandler设置为NULL。那么可以多次执行这个语句吗?
感谢
我想在程序结束时取消注册事件处理程序。它看起来像这样 -从空控件取消注册事件处理程序
myobject.EventHandler -= new MyEventHandler(MyMethod);
现在,我注意到,在某些条件下,这个语句被执行多次。该程序似乎按预期工作,但我想确认它没有做出奇怪的事情。
当处理程序未注册时,第一次将object.EventHandler设置为NULL。那么可以多次执行这个语句吗?
感谢
当处理器被注销第一次object.EventHandler设置为NULL。那么可以多次执行这个语句吗?
是的,没关系。它只是不会做任何事情。
顺便说一句,你并不需要显式地创建委托时,你可以这样做:
myobject.EventHandler -= MyMethod;
(除非你还在使用C#1,这似乎不太可能在2014年... )
那好吗? – 2014-09-06 13:12:37
@HenkHolterman,你是什么意思?为什么它不是好的? – 2014-09-06 13:13:58
显然,理解为什么执行多次会更好......但是本身多次取消订阅并没有不良影响。 – 2014-09-06 13:14:57
我同意你应该看看为什么代码被执行多次,而它应该只执行一次,尤其是因为它执行了多少次(根据你的描述)。
我想这是从asp.net?如果是这样,你需要注意一些控件上的autopostback属性,这些控件在触发某些事件时可能触发父控件事件。之所以我猜这是否来自asp.net,是因为你说'有时',因此当像按钮或文本框的控制不使用它可能表现'正常'。虽然这只是纯粹的猜测,因为你的问题是缺乏细节...
我想你在这里问错了问题。你的程序执行多次,而它只应执行一次。找出它为什么会这样并解决这个问题不是更好吗? – Matthijs 2014-09-06 13:11:19
“在我的程序结束时”你不需要退订任何东西。 – 2014-09-06 13:13:23