In caso di arresto dell'applicazione, non è necessario eseguire correttamente lo smaltimento di WindowsFormsHost. Poiché deriva da HwndHost, lo smaltimento viene gestito quando il Dispatcher viene arrestato. Se usi Reflector vedrai che quando HwndHost viene inizializzato crea un WeakEventDispatcherShutdown.
Se lo si utilizza in una finestra di dialogo, il meglio che posso suggerire è di ignorare OnClosed e disporre dell'Host, altrimenti HwndHost rimarrà in attesa fino a quando il Dispatcher non verrà arrestato.
public partial class Dialog : Window
{
public Dialog()
{
InitializeComponent();
}
protected override void OnClosed(EventArgs e)
{
if (host != null)
host.Dispose();
base.OnClosed(e);
}
}
Un modo semplice per testare quando Dispose viene chiamato è quello di derivare una classe personalizzata da WindowsFormsHost e giocare con situazioni diverse. Metti un punto di rottura in dispose e vedi quando viene chiamato.
public class CustomWindowsFormsHost : WindowsFormsHost
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
fonte
2008-11-02 23:44:51
Quando dici "durante lo spegnimento" intendi che l'app viene chiusa? Il controllo non è più visibile? Una finestra di dialogo viene chiusa? –
Qui intendo lo spegnimento delle applicazioni, ma sono interessato anche alla chiusura del dialogo. – morechilli