最佳答案
我已经创建了一个自定义的 WPF 用户控件,它将被第三方使用。我的控件有一个可抛弃的私有成员,我想确保一旦包含窗口/应用程序关闭,它的释放方法总是被调用。但是,UserControl 不是一次性的。
我尝试实现 IDisposable 接口并订阅 Unload 事件,但是在主机应用程序关闭时都没有被调用。MSDN 表示可能根本不会引发卸载事件。它也可能被触发不止一次,也就是用户更改主题的时候。
如果可能的话,我不希望依赖于控件的使用者记得调用特定的 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;