如果在将被释放的 Windows Form 内使用 WPF 用户控件,那么该用户控件会被释放吗?
问题的原因是在Windows Forms中使用WPF的User Control时,如果该User Control实现了IDisposable接口,则会被Dispose,否则不会被Dispose。在ElementHost类的Dispose方法的源代码中可以看到这一点。代码中判断了Child是否实现了IDisposable接口,如果是则调用Dispose方法进行资源清理。
解决方法是在Windows Forms中使用WPF的User Control时,如果需要进行资源清理,可以实现IDisposable接口,并在Dispose方法中进行相应的清理操作。但需要注意的是,WPF本身并不依赖于IDisposable接口进行资源清理,只有在使用ElementHost控件将User Control嵌入到Windows Forms项目中时才需要依赖于IDisposable接口进行资源清理。在纯粹的WPF项目中,应该使用WPF自身的机制进行资源清理。