【问题标题】:Alternatives to the .NET WebBrowser control?.NET WebBrowser 控件的替代品?
【发布时间】:2011-07-26 08:14:55
【问题描述】:

我正在开发一个 .NET 2.0 WinForms 应用程序。它以前包含标准的 Microsoft ActiveX WebBrowser 控件,但我正在研究替代方案。

我需要做什么:

  • 将 WebBrowser 用作应用程序中的标准 Web 浏览器控件

  • 也可以在后台使用它 - 例如,创建控件、呈现网页并将结果输出到图像(使用 .DrawToBitmap),而无需将控件附加到表单。

  • 挂钩到生命周期中的各种事件——主要是 DocumentCompleted。

  • 可以通过控件的新实例或使用现有控件每 30 秒左右加载(或重新加载)网页。应用程序可以长时间无限期地保持运行。

  • 必须使用 .NET 2.0。没有 3.0+ 或 WPF 的东西。

到目前为止,我能找到的仅有的三个控件都有相当严重的问题,阻碍我继续前进:

  • Microsoft ActiveX WebBrowser - 存在大量内存泄漏,不适合长时间运行。

  • WebKit.NET - 据我所知,这必须在任何渲染完成之前附加到表单,使其对于缩略图生成部分毫无用处。似乎也受到内存泄漏的影响。

  • GeckoFX - 最适合我,但不能正确支持线程(这对于缩略图生成部分至关重要)。

还有其他选择吗?

【问题讨论】:

  • “不正确支持线程”是什么意思我认为可以创建一些解决方法
  • 有一个 Xpcom.Initialize 调用,在 GeckoFX 中只能调用一次。从我收集到的信息来看,一旦您在线程中调用该方法,GeckoWebBrowser 控件就会绑定到该线程——在任何其他线程中使用 GeckoWebBrowser 执行任何操作都会导致 COM 错误。
  • 作为一种解决方法,您可以生成将封装 GeckoFX 的进程
  • 是的,这就是我一直在阅读并保留在我脑海中的一个想法。某种最后的手段 - 主要项目已经非常复杂,我不想添加更多的移动部分作为外部流程。
  • 嘿!我有个主意!您可以尝试将它放在不同的 AppDomain 中,它可能会提供与单独进程相同的好处并且开销要小得多。

标签: .net browser geckofx


【解决方案1】:

您能否将 WebKit.Net 嵌入到显示在屏幕可见区域之外的表单中?

您可能还会查看 Mono.WebKit 或 Mono.Mozilla,尽管我从未使用过其中任何一个。

【讨论】:

  • 我用 WebKit 尝试了一些类似的技巧,但无法让它发挥作用。并不意味着不可能——我只玩了一两个小时。不过,Mono 库的有趣想法。我会玩弄它,看看我能不能到达任何地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多