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