在WPF中托管ActiveX控件:WindowsFormsHost还是ActiveXHost?

时间:2013-08-12 13:23:26

标签: .net wpf winforms wpf-controls activex

我知道MSDN recommends使用WindowsFormsHost来托管WPF应用程序中的ActiveX控件。但是还有ActiveXHost,用作WebBrowser控件的基础。它被描述为一个基础设施类,但它是公共,我可以从它派生。它似乎提供了托管自定义ActiveX控件所需的一切。为什么要有另一层?这是个坏主意吗?

2 个答案:

答案 0 :(得分:1)

您不应该使用它的最大原因是,作为基础结构类,它们无法确保api在发布之间保持稳定。它们可以从根本上改变它应该如何被使用,即使是在更新到框架中的次要内容。现在,他们可能不会,但由于你不能保证它会稳定,如果一个新版本的.NET破坏了api,你的应用程序可能会突然在用户的机器上突然中断(对他们而言)。

我不相信发生,但这就是危险。

答案 1 :(得分:1)

如果您正在构建一个我认为是这种情况的WPF应用程序,那么您应该使用WindowsFormsHost控件来托管您的ActiveX内容。 WebBrowser继承自ActiveXHost,允许您在Web浏览器中运行的XAML应用程序中托管ActiveX内容,从而引发某些信任和安全问题。

如果查看继承树,您会发现两个主机都派生自HwndHost,但WindowsFormsHost供开发人员使用。

无论如何,正如@Abe所说,没有什么真正危险可能发生,但如果MSFT的人说不这样做,那就不要了。