我创建了一个定制的WPF用户控件,该控件旨在供第三方使用。我的控件有一个私人成员,它是一次性的,我想确保它的dispose方法将在包含窗口/应用程序关闭后始终被调用。但是,UserControl不是一次性的。我尝试实现IDisposable接口并订阅Unloaded事件,但在主机应用程序关闭时不会调用。如果可能的话,我不希望依赖于我的控件的消费者记住调用特定的Dispose方法。处置WPF用户控件
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;
什么用户控制的空载事件? – akjoshi 2010-12-06 13:56:29
@akjoshi:MSDN说:Unloaded事件可能根本不会被提出。它也可能不止一次被触发,也就是当用户改变主题时。 – Dudu 2011-03-12 12:01:56
虽然您可以在用户控件上实现IDisposable接口,但不保证您的第三方将调用Dispose模式实现的dispose方法。如果您坚持原生资源(例如文件流),则应考虑使用终结器。 – Philippe 2013-03-08 21:51:57