【问题标题】:Disposing managed resources in WPF Custom Controls在 WPF 自定义控件中释放托管资源
【发布时间】:2026-01-18 06:55:01
【问题描述】:

我正在为第三方库编写一些 WPF 自定义控件。例如,我用一些依赖属性增强了标准ComboBox。主要问题是我的控件有一些 IDisposable 对象作为私有实例,我想处置这些对象。 我的控件的结构是这样的:

public class MyComboBox : ComboBox

{

private IDisposableObject _innerObject;   
[..]

} 

当控件被 GC'ed 时,我如何确保该对象被释放?最好的方法是什么?

提前致谢。

PS:我尝试使用 Finalizer 方法,但我认为这不是一个干净且好的解决方案,并且使用控件的 Unloaded 事件(当主题更改)。

【问题讨论】:

    标签: wpf wpf-controls custom-controls disposing


    【解决方案1】:

    让您的 MyComboBox 实现 IDisposable 并在该处置方法中处置您的其他对象。 完成组合框后调用 dispose。

    public class MyComboBox : ComboBox, IDisposable 
    { 
    
        private IDisposableObject _innerObject;    
        [..] 
    
        public void  Dispose()
        {
            _innerObject.Dispose();
        }
    }
    

    【讨论】:

    • 您好,感谢您的回答。问题是 ComboBox 属于一个控件库,通常它只在 XAML 代码中使用。所以 Dispose 方法没有被调用。