我有一个连续运行的应用程序,它创建和销毁类其中有一些像鼠标点击事件和事件等等...... 第一个问题是什么是正确的方法退订?如果订阅这个样子的:C#.NET合适的事件订阅和取消订阅
Panel1.MouseClick += new MouseEventHandler(Action_MouseClick);
是正确的退订这样的:
Panel1.MouseClick -= new MouseEventHandler(Action_MouseClick);
还是确定要做到这一点:
Panel1.MouseClick -= Action_MouseClick;
或者是无论哪种方式好不好?
我的另一个问题是,是,如果我使用微软的Visual C#工作室通过设计人员创建的事件,它会自动退订的“处置”方法的一部分?或者我仍然需要在代码中放置取消订阅方法?
感谢qstarin ......我注意到,如果类已经得到妥善处置,如果我不退订一些由设计者设定的事件的节目会慢慢泄漏内存和我想知道,这意味着双击上设计器中的Button将创建buttonClick事件。但我并没有赞成这些事件。 根据文章: “http://msdn.microsoft.com/en-us/library/ms366768%28VS.80%29.aspx” 林想知道如果垃圾收集器是从堆中删除对象如果我没有参加这些活动。 – ecklerpa 2010-07-13 20:24:17
从那篇文章中,“只要发布对象拥有该引用,您的订阅对象就不会被垃圾收集。“ 表单上的一个控件是发布对象,对控件的唯一引用是其表单中的成员变量(通常是这种情况,除非你特别保留对控件的引用),因此,一旦表单不见了,GC不能达到控制,因此不能到达组播代理 所有引用无法访问,应该收集 – 2010-07-13 20:39:51
另外,作为一个健全性检查,我会认为,如果设计器自动订阅,但不自动取消订阅,导致内存泄漏,然后一大堆.Net应用程序会有这个问题 - 也许很明显,情况并非如此(或者我们会听到更多,是的) – 2010-07-13 20:41:18