Ho creato un controllo utente WPF personalizzato che deve essere utilizzato da una terza parte. Il mio controllo ha un membro privato che è usa e getta e vorrei assicurarmi che il suo metodo dispose venga sempre chiamato una volta chiusa la finestra / applicazione contenente. Tuttavia, UserControl non è usa e getta. Ho provato a implementare l'interfaccia IDisposable e ad iscrivermi all'evento Unloaded ma nessuno dei due viene chiamato quando l'applicazione host si chiude. Se possibile, non voglio fare affidamento sui consumatori sotto il mio controllo che si ricordano di chiamare uno specifico metodo Dispose.
public partial class MyWpfControl : UserControl
{
SomeDisposableObject x;
// where does this code go?
void Somewhere()
{
if (x != null)
{
x.Dispose();
x = null;
}
}
}
L'unica soluzione che ho trovato finora è iscrivermi all'evento ShutdownStarted di Dispatcher's. È un approccio ragionevole?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;