我創建了一個定製的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