方法我有一个简单的WPF单一窗口的应用程序包含文本框和按钮。而且我还在WPF窗口中使用Windows Forms的NotifyIcon和DateTimePicker。我怎样才能有效地处理所有的控制?当调用Dispose()在WPF应用程序
6
A
回答
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);
}
}
相关问题
- 1. 从WPF应用程序调用Windows 8 Maps应用程序
- 2. WPF应用程序在WPF应用程序中运行
- 3. 在WPF/Surface应用程序内托管WPF/Surface应用程序
- 4. RaceOnRCWCleanup当关闭WPF应用程序
- 5. 调试Silverlight中的WPF应用程序
- 6. 在表单中调用Dispose
- 7. WPF应用程序
- 8. 如何从WPF应用程序调用.ashx处理程序?
- 9. 在C#中对线程实用程序使用'using' - 何时Dispose被调用?
- 10. 应该IDataReader :: Dispose调用IDataReader :: Close?
- 11. Twilio应用程序调用当应用程序在Android中关闭或死亡?
- 12. 多线程WPF应用程序:调度程序调用。更有效的方法?
- 13. 为什么需要在WPF应用程序中调用PropertyChanged
- 14. 如何在WPF应用程序中调用.exe
- 15. 错误在WPF应用程序异步调用WCF服务
- 16. 在WPF应用程序中使用GDI +
- 17. 在WPF应用程序中使用reCaptcha
- 18. 在WPF应用程序内嵌入Unity3D应用程序
- 19. 当在Mac应用程序
- 20. Silverlight或WPF应用程序或WPF浏览器应用程序在本地运行的应用程序?
- 21. WPF应用程序性能
- 22. Wpf复合应用程序
- 23. 与WPF应用程序
- 24. WPF应用程序崩溃
- 25. 测试WPF应用程序
- 26. Wpf应用程序部署
- 27. 多页WPF应用程序
- 28. WPF应用程序布局
- 29. C#WPF应用程序类
- 30. WPF应用程序冻结