在我的WPF应用程序中,我使用HwndHost托管Win32内容。但是,创建HwndHost并不会创建本地窗口。相反,这是在稍后由WPF调用的重写的BuildWindowCore()方法中完成的。
我的托管内容需要本地窗口的窗口句柄进行自身初始化。不幸的是,我无法强制创建窗口(即让WPF调用BuildWindowCore),因此我有第二个线程,它会轮询HwndHost,直到它被初始化为止。
在.NET 4.0 / WPF 4.0中,添加了一个新方法WindowInteropHelper.EnsureHandle()。我希望它能解决这种情况,但它仅适用于Window,而不适用于HwndHost(它不从Window派生)。您有什么建议,我该怎么办?
编辑:
我忘记添加一些可能解决方案的限制:
1. HwndHost放置在一个控件中,根据用户设置,它可以是应用程序主窗口的子项,也可以通过第三方停靠管理器放置在新的Window中。这意味着在创建窗口时,我不能确定父窗口(因此也就不知道它的hWnd)是什么。
2. 虽然本地代码需要在其初始化期间使用hWnd,但仅当用户请求显示窗口时才会显示该窗口(即它最初是不可见的)。如果可能的话,应避免需要显示窗口,然后立即将其隐藏。
我的托管内容需要本地窗口的窗口句柄进行自身初始化。不幸的是,我无法强制创建窗口(即让WPF调用BuildWindowCore),因此我有第二个线程,它会轮询HwndHost,直到它被初始化为止。
在.NET 4.0 / WPF 4.0中,添加了一个新方法WindowInteropHelper.EnsureHandle()。我希望它能解决这种情况,但它仅适用于Window,而不适用于HwndHost(它不从Window派生)。您有什么建议,我该怎么办?
编辑:
我忘记添加一些可能解决方案的限制:
1. HwndHost放置在一个控件中,根据用户设置,它可以是应用程序主窗口的子项,也可以通过第三方停靠管理器放置在新的Window中。这意味着在创建窗口时,我不能确定父窗口(因此也就不知道它的hWnd)是什么。
2. 虽然本地代码需要在其初始化期间使用hWnd,但仅当用户请求显示窗口时才会显示该窗口(即它最初是不可见的)。如果可能的话,应避免需要显示窗口,然后立即将其隐藏。