【问题标题】:Hosting ActiveX control in WPF: WindowsFormsHost or ActiveXHost?在 WPF 中托管 ActiveX 控件:WindowsFormsHost 还是 ActiveXHost?
【发布时间】:2013-08-12 13:23:25
【问题描述】:

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

【问题讨论】:

    标签: .net wpf winforms wpf-controls activex


    【解决方案1】:

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

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

    无论如何,正如@Abe 所说,不会发生真正危险的事情,但如果 MSFT 的人说不要这样做,那就不要这样做。

    【讨论】:

    • 您的意思是WebBrowser 而不是BrowserControl?我只是找不到BrowserControl。谢谢。
    【解决方案2】:

    您不应该使用它的最大原因是,作为基础架构类,它们无法确保 api 在不同版本之间保持稳定。他们甚至可以从根本上改变它的使用方式,即使是在对框架进行了次要更新时也是如此。现在,他们可能不会,但由于您无法保证它会稳定,因此如果新版本的 .NET 破坏了 api,您的应用程序可能会突然在用户机器上突然中断(对他们来说)。

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

    【讨论】:

    • 感谢您的意见。只是不清楚他们为什么离开它public。它的唯一后代是来自同一程序集的 WebBrowser。他们密封了 WebBrowser 类,他们可以将 ActiveXHost 标记为 internal,但他们没有。
    • 是的,我知道,这确实有点奇怪。也许负责该类的开发人员只是不想为它编写文档,所以决定它“仅供内部使用”哈哈。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多