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

4
我正在开发一款WPF应用程序,使用System.AddIn来解决我们在Windows Forms控件包装在WindowsFormsHost控件中时遇到的内存泄漏问题。这个插件被用来根据需要加载和卸载Windows Forms控件,以避免当前版本的WPF中的WindowsFormsHost控件耗费资源过多,并且由于错误的清理逻辑导致Windows Forms控件出现内存泄漏。
我们面临的问题是,在应用程序中加载和卸载插件后,WPF应用程序将在退出时抛出“无效窗口句柄”的Win32异常。虽然可以捕获异常,但在Windows 7下仍会出现崩溃对话框,这是不能接受的。
关于代码,相关事实如下:
1.只有当WPF主机应用程序加载和卸载插件时才会出现异常。我们在卸载插件之前调用自定义Dispose方法来处理WindowsFormsHost控件和Windows Forms控件的释放。
2.插件在卸载之前关闭其Dispatchers(作为上述处理的一部分),这在MSDN文档和博客文章中已经指出是必需的并且可以解决此问题,但在这种情况下未能解决。
3.我们没有选择使用Windows Forms控件,因为它对于某些报表是必需的,而且有太多的报表文件需要转换,在没有合适的WPF版本和没有时间进行更改的情况下。
我无法提供代码示例,因此希望能获得任何思路或以往经验,以便在这种情况下找出任何遗漏的问题。

我也遇到过这个问题 - 希望能听到一个解释。 - Jake
1个回答

2

我之前遇到了类似的问题。我注意到在主窗口的Window_Closing事件处理程序中调用Dispatcher.InvokeShutdown(在测试控件内容不为null后),并记得它是解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接