Utworzyłem niestandardową kontrolkę użytkownika WPF, która jest przeznaczona do użytku przez inną firmę. Mój formant ma prywatnego członka, który jest jednorazowy i chciałbym mieć pewność, że jego metoda usuwania będzie zawsze wywoływana po zamknięciu zawierającego okno / aplikacji. Jednak UserControl nie jest jednorazowy. Próbowałem zaimplementować interfejs IDisposable i subskrybować zdarzenie Unloaded, ale żadne z nich nie jest wywoływane po zamknięciu aplikacji hosta. Jeśli to w ogóle możliwe, nie chcę polegać na konsumentach mojej kontroli, którzy pamiętają o wywołaniu określonej metody Dispose.
public partial class MyWpfControl : UserControl
{
SomeDisposableObject x;
// where does this code go?
void Somewhere()
{
if (x != null)
{
x.Dispose();
x = null;
}
}
}
Jedynym rozwiązaniem, jakie do tej pory znalazłem, jest zasubskrybowanie zdarzenia ShutdownStarted Dispatchera. Czy to rozsądne podejście?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;