繁体   English   中英

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

[英]“Invalid Window Handle” on exiting of WPF application that uses System.AddIn

我正在使用WPF应用程序,该应用程序使用System.AddIn解决了包装在WindowsFormsHost控件中的基于Windows Forms的控件遇到的内存泄漏问题。 加载项用于根据需要加载和卸载基于Windows Forms的控件,以避免WindowsFormsHost的开销,该开销会一直徘徊,直到应用程序在WPF的当前版本中关闭以及由于以下原因导致基于Windows Forms的控件出现内存泄漏:错误的清理逻辑。

我们面临的问题是,在应用程序中加载和卸载加载项后,WPF应用程序将在应用程序退出时引发Win32异常“ Invalid Window Handle”。 这通常不会引起严重的问题,但是,即使有可能捕获到异常,也不会阻止Windows将应用程序视为崩溃并在Windows 7下显示崩溃对话框,这是不可接受的。

关于代码,相关事实是:

  1. 仅当加载项由WPF主机应用程序加载和卸载时,才会发生该异常。 我们将WindowsFormsHost控件和基于Windows Forms的控件作为自定义Dispose方法的一部分放置在加载项中,该方法在卸载加载项之前被调用。

  2. 加载项在卸载之前(作为上述处置过程的一部分)正在关闭其Dispatchers,这是MSDN文档和博客文章中所要求的,并且还可以解决这种情况下没有发生的问题。

  3. 我们没有选择使用基于Windows窗体的控件的方法,这是某些报表所必需的,并且要转换的报表文件太多,没有合适的WPF版本,也没有时间进行更改。

我无法提供代码示例,因此,如果我错过了某些事情,我会联系您提供与这种情况有关的任何想法或以前的经验。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM