退出使用System.AddIn的WPF应用程序时出现“无效窗口句柄”

我正在使用一个
WPF应用程序,该应用程序正在使用System.AddIn来解决我们在
WindowsFormsHost控件中包含的基于Windows窗体的控件所遇到的内存泄漏问题.该加载项用于根据需要加载和卸载基于Windows窗体的控件,以避免WindowsFormsHost的开销,它将在当前版本的WPF中关闭应用程序并且基于Windows窗体的控件中的内存泄漏糟糕的清理逻辑.

我们面临的问题是,在应用程序中加载和卸载加载项后,WPF应用程序将在应用程序退出时抛出“无效窗口句柄”的Win32异常.这通常不是一个可怕的问题,但即使可以捕获异常,它也不会阻止Windows看到应用程序崩溃并在Windows 7下显示崩溃对话框,这是不可接受的.

关于代码,相关事实是:

>只有在WPF宿主应用程序加载和卸载加载项时才会发生异常.我们在加载项中处理WindowsFormsHost控件和基于Windows窗体的控件,作为卸载加载项之前调用的自定义Dispose方法的一部分.
>加载项在卸载之前关闭其Dispatchers(作为上述处理过程的一部分),这在MSDN文档和博客文章中已经注明,并且也解决了在这种情况下没有发生的问题.
>我们没有选择使用基于Windows窗体的控件,因为它是某些报告所需的,并且有太多的报告文件无法转换,也没有合适的WPF版本,也没有时间更改它.

我无法提供代码的样本,所以我正在寻找有关这种情况的任何想法或以前的经验,以防我错过了什么.

最佳答案 我有一个类似的问题回来了.我看到我在主窗口的Window_Closing事件处理程序中调用Dispatcher.InvokeShutdown(在测试控件的内容不为null之后),并且似乎记得它是解决方案.

点赞