我已经创建了一个供第三方使用的自定义WPF用户控件。我的控件有一个私有成员,该成员是可抛弃的,并且我想确保一旦关闭包含窗口/应用程序后,将始终调用其dispose方法。但是,UserControl不是一次性的。我尝试实现IDisposable接口并订阅Unloaded事件,但是在主机应用程序关闭时都未调用。如果有可能,我不想依靠我的控件的使用者记住要调用特定的Dispose方法。
public partial class MyWpfControl : UserControl { SomeDisposableObject x; // where does this code go? void Somewhere() { if (x != null) { x.Dispose(); x = null; } } }
到目前为止,我发现的唯一解决方案是订阅Dispatcher的ShutdownStarted事件。这是合理的方法吗?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
有趣的博客文章在这里:
http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf- usercontrol- ish.aspx
它提到了订阅Dispatcher.ShutdownStarted来处理资源。