2009-08-07 145 views
6

方法我有一个简单的WPF单一窗口的应用程序包含文本框和按钮。而且我还在WPF窗口中使用Windows Forms的NotifyIcon和DateTimePicker。我怎样才能有效地处理所有的控制?当调用Dispose()在WPF应用程序

回答

5

WPF中几乎没有什么有Dispose方法。绝大多数类都封装了纯粹的管理信息。您可以将一个对象插入到树(例如通过Children.Add方法),你可以再次将其删除 - 这是国家管理是如何工作的。它完全不符合IDisposable模式,因为一旦你删除了一个控件,你可以再次添加它,而Dispose意味着永远(尽管除了Add//Remove方法,你可以使用Dispose来管理它。

A discussion about it on the Microsoft forums.

有几件事情,应该是IDisposable,但不是像DispatcherTimer,并没有什么,从实现你自己的类IDisposable阻止你。你应该打电话给Dispose;基本上当你知道你不会再使用这个对象的时候。

对于Window,您只需致电Close即可关闭它,而WPF负责处理所有其他事情。

1

我会说在WPF应用程序中应用的规则与其他.NET应用程序一样:如果某个对象实现了IDisposable,则应在完成使用后调用Dispose。如果动态加载和卸载控件,以及他们不执行IDisposable,只设置任何引用null(和拆卸任何事件处理程序)应该够垃圾收集器来完成其工作。

0

如果控制一些的IContainer的一部分(这是在.NET中的通用模型)比你的控件只需要实现了IDisposable的。因此Dispose()会在适当的时候自动调用。

0

坚持CA1001:让拥有类型实现IDisposable

放弃所有控件为IDisposable的旧Windows窗体事实。实施并致电Dispose

sealed partial class MainWindow : IDisposable { 
    readonly IDisposable disposable; 
    public MainWindow() { 
     disposable = ... 
    } 

    public void Dispose() { 
     disposable.Dispose(); 
    } 

    protected override void OnClosed(EventArgs e) { 
     Dispose(); 
     base.OnClosed(e); 
    } 
}