我们有一个派生自 FrameworkElement 的类,它不受我们的控制。
此类在中注册事件处理程序初始化时 http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.oninitialized%28v=vs.110%29.aspx方法。
由于 FrameworkElement 没有提供 OnInitialize 的对应项,因此正确清理此类的模式是什么?
它保持根状态,因为它的任何部分都不会删除导致泄漏的 EventHandler。
不存在“取消初始化”这样的事情。当无法在构造函数中完全初始化对象时,将使用初始化方法,因为它依赖于构造期间不可用的数据。在这些情况下,构造分为两个阶段:第一步在无参数构造函数中执行,第二步在初始化方法中执行,例如OnInitialize
,外部数据可用后
您所描述的是对象处置,这是通过调用对象的Dispose
方法。一个编写良好的类应该清理其数据,释放任何外部资源and释放所有事件处理程序。
视觉元素的生命周期通常还有另一个步骤,由 OnLoad/OnUnload 方法处理。当元素实际放置在 XAML 视图中并连接到其他 UI 元素时,将发生加载步骤。事件处理程序应在 OnLoad 方法中注册并在 OnUnload 方法中删除。
如果该元素没有Dispose
方法,您也许可以引发 Unload 事件来强制清理,尽管这有点像黑客:
control.RaiseEvent(new RoutedEventArgs(FrameworkElement.UloadedEvent))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)