W przypadku wyłączenia aplikacji nie ma nic, co trzeba zrobić, aby prawidłowo pozbyć się WindowsFormsHost. Ponieważ pochodzi z HwndHost disposing jest obsługiwane, gdy Dispatcher jest wyłączony. Jeśli użyjesz Reflectora, zobaczysz, że po zainicjowaniu HwndHost tworzy WeakEventDispatcherShutdown.
Jeśli używasz go w oknie dialogowym, najlepszym rozwiązaniem, które mogę zasugerować, jest zastąpienie OnClosed i pozbycie się hosta, w przeciwnym razie HwndHost będzie się kręcić, dopóki Dispatcher nie zostanie zamknięty.
public partial class Dialog : Window
{
public Dialog()
{
InitializeComponent();
}
protected override void OnClosed(EventArgs e)
{
if (host != null)
host.Dispose();
base.OnClosed(e);
}
}
Prostym sposobem na sprawdzenie, kiedy wywołanie zostanie wywołane, jest wyprowadzenie niestandardowej klasy z WindowsFormsHost i zabawy w różnych sytuacjach. Ustaw punkt przełomowy i zobacz, kiedy zostanie wywołany.
public class CustomWindowsFormsHost : WindowsFormsHost
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
Kiedy mówisz "podczas zamykania systemu", masz na myśli, że aplikacja jest zamykana? Kontrola nie jest już widoczna? Okno dialogowe jest zamykane? –
Mam tutaj na myśli zamknięcie aplikacji, ale interesuje mnie również zamykanie okien dialogowych. – morechilli