我试图从计时器添加和删除事件,我有以下代码:
Timer myTimer = new Timer(); // Windows.Forms Timer public void addEvent(MyDelegate ev) { myTimer.Tick += new EventHandler(ev); } public void removeEvent(MyDelegate ev) { myTimer.Tick -= new EventHandler(ev); }
我不知道如果我在尝试以这种方式添加和删除委托时做了任何愚蠢的事情,我能够添加代理并按预期启动它们.但是,当我尝试删除事件时,它们会继续触发Timers Tick.
任何人都能看到明显错误吗?
我相信这段代码:
myTimer.Tick -= new EventHandler(ev);
创建一个新的EventHandler对象.它永远不会删除现有的EventHandler.要获得所需的功能,您应该将EventHandlers而不是MyDelegates传递给add和remove方法:
Timer myTimer = new Timer(); // Windows.Forms Timer public void addEvent(EventHandler ev) { myTimer.Tick += ev; } public void removeEvent(EventHandler ev) { myTimer.Tick -= ev; }
调用代码必须跟踪添加的EventHandler,以便在取消订阅时可以传入相同的EventHandler对象.