我有一个简单的WPF单窗口应用程序,其中包含文本框和按钮。我还在WPF窗口中使用了Windows Forms的NotifyIcon和DateTimePicker控件。如何有效地处理所有控件?
Dispose
方法。绝大多数类都封装了纯管理信息。您可以将一个对象附加到树中(例如通过Children.Add
方法),然后可以将其删除 - 这就是状态管理的工作原理。它完全不符合IDisposable
模式,因为一旦您删除了一个控件,就可以再次添加它,而Dispose
意味着永远删除(尽管您可以使用Dispose
与Add
/Remove
方法一起管理)。
在Microsoft论坛上讨论它。
有一些东西应该是IDisposable
但不是,例如DispatcherTimer
,并且没有阻止您在自己的类上实现IDisposable
。什么时候调用Dispose
取决于您; 基本上是当您知道不再使用对象时。Window
,只需调用Close
即可关闭它,WPF会处理其他所有事情。我认为在WPF应用程序中与任何其他.NET应用程序一样适用相同的规则:如果一个对象实现了IDisposable
,那么在使用完它后应该调用Dispose
。如果您动态加载和卸载控件,并且它们没有实现IDisposable
,只需将任何引用设置为null
(并分离任何事件处理程序),垃圾收集器就可以完成其工作。
遵循CA1001:让拥有类型实现IDisposable。
放弃旧的Windows Forms真理,即所有控件都是IDisposable的。自己实现并调用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);
}
}