在我的 WPF 应用程序中,我使用 HwndHost 托管 Win32 内容。但是,创建 HwndHost 不会创建本机窗口。相反,这是在BuildWindowCore()
WPF 稍后调用的重写方法中完成的。
我的托管内容需要本机窗口的窗口句柄来进行自己的初始化。不幸的是,我无法强制创建窗口(即让 WPF 调用 BuildWindowCore),所以我有第二个线程轮询 HwndHost,直到它被初始化。
在 .NET 4.0 / WPF 4.0 中,WindowInteropHelper.EnsureHandle()
添加了一个新方法。我曾希望这能解决这种情况,但它只适用于 Window,而不是 HwndHost(它不是从 Window 派生的)。你有什么建议我可以做的吗?
编辑:
我忘了为可能的解决方案添加更多约束:
- HwndHost 放置在一个控件中,根据用户设置,该控件可以是应用程序主窗口的子窗口,也可以放置在新窗口中(通过第三方停靠管理器)。这意味着在创建窗口期间,我不确定父窗口(以及它的 hWnd)将是什么。
- 虽然本机代码在其初始化期间需要 hWnd,但该窗口仅在用户请求显示时才显示(即一开始它是不可见的)。如果可能,应该避免需要显示窗口,然后立即再次隐藏它。