WPF互操作-HwndHost不会自动销毁托管窗口

WPF互操作-HwndHost不会自动销毁托管窗口,wpf,interop,hwndhost,Wpf,Interop,Hwndhost,我无法确保正确销毁托管窗口 我有一个HwndHost派生的类,我正在TabControl中显示它(尽管这可能与此无关)。我试图在选项卡关闭时销毁托管内容(而不是在包含内容的窗口关闭时) 我目前拥有的代码的作用是myControlHost.Dispose(),它确保立即调用HwndHost.DestroyWindowCore。问题是,DestroyWindowCore实际上并没有销毁托管的HWND内容 我本以为这足以确保底层CWnd派生的应用程序接收WM\u CLOSE或其他什么,但这似乎没有发生

我无法确保正确销毁托管窗口

我有一个
HwndHost
派生的类,我正在TabControl中显示它(尽管这可能与此无关)。我试图在选项卡关闭时销毁托管内容(而不是在包含内容的窗口关闭时)

我目前拥有的代码的作用是
myControlHost.Dispose()
,它确保立即调用
HwndHost.DestroyWindowCore
。问题是,DestroyWindowCore实际上并没有销毁托管的HWND内容

我本以为这足以确保底层
CWnd
派生的应用程序接收
WM\u CLOSE
或其他什么,但这似乎没有发生-Spy++只报告正在发送的注册消息“HwndSubclass.DetachMessage”

我已经了解到,您不应该在
DestroyWindowCore
中显式发送托管窗口
WM_CLOSE
,因为这应该是自动发生的


手动删除
HwndHost
派生控件时,确保正确销毁托管窗口的正确方法是什么

根据此MSDN文档,他们正在DestroyWindowCore中调用DestroyWindow():

DestroyWindow()将WM_CLOSE消息发布到消息队列中,所以实际上您不需要或不应该直接发送/发布WM_CLOSE


在我的应用程序中,实际上我在一个子DLL中调用DestroyWindow(),该子DLL在DestroyWindowCore回调中从C#端调用。然后,一切正常

谢谢,最后我从
DestroyWindowCore()
中调用了
DestroyWindow()
,但在找到最初的参考资料之前,我不想更新这篇文章,因为它指出您不应该这样做。。。但是我很懒。我怀疑我误解了文档或者文档不正确(实际上只是代码示例中的注释)