WPF控件WindowsFormsHost继承自IDisposable。
如果我有一个包含上述某些控件的复杂WPF可视树,那么在关机期间可以使用什么事件或方法来调用IDispose?
最佳答案
如果应用程序关闭,则无需采取任何措施即可正确处置WindowsFormsHost。由于它派生自HwndHost,因此在Dispatcher关闭时将处理处置。如果使用Reflector,则会看到在初始化HwndHost时会创建一个WeakEventDispatcherShutdown。
如果在对话框中使用它,则我最好的建议是重写OnClosed并处置主机,否则HwndHost会一直徘徊,直到分派(dispatch)器关闭为止。
public partial class Dialog : Window
{
public Dialog()
{
InitializeComponent();
}
protected override void OnClosed(EventArgs e)
{
if (host != null)
host.Dispose();
base.OnClosed(e);
}
}
测试何时调用dispose的一种简单方法是从WindowsFormsHost派生自定义类,并尝试不同的情况。在处理过程中放置一个断点,看看它何时被调用。
public class CustomWindowsFormsHost : WindowsFormsHost
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}