为2020年更新,我链接了我的文章,在文章中我比较了在基本Windows桌面应用程序中托管HTML WebView的不同方法的内存占用:
基于Internet Explorer的WPF WebBrowser控件存在一些键盘和焦点问题以及内存泄漏问题。作为这些问题的替代解决方案,我们正在考虑在基于HTML编辑的WPF/C#项目中托管Chromium而不是WebBrowser控件的可用选项。类似的问题以前在这里被问过。我已经阅读了答案并做了自己的研究,但我希望从那些在生产质量项目中实际使用过以下任一选项的人那里获得更多的反馈:
Awesomium和Awesomium.net
这看起来很合适,但我不喜欢这个项目不是开源的,而且不容易获得完整的源代码。此外,这对我们的项目来说可能是矫枉过正,因为离屏呈现并不是我们真正依赖的东西。
Chromium Embedded Framework(CEF)和CEF的.NET绑定
这可能是目前可用的最佳选择。该项目似乎是活跃的,目前正在与Chrome V27同步。CEF3采用Chrome多进程架构。看起来Adobe也给了它一些支持。
谷歌的Chrome框架
虽然它最初的目的是作为一个用于IE和Firefox的HTML5插件,但实际上它也作为独立的ActiveX控件工作,所以我可以将它包装起来与WPF一起使用。它公开了一个足够的API来与内部web页面交互(onMessage,AddEventListener/RemoveEventListener,PostMessage
)。我知道谷歌将停止Chrome Frame,但我认为这些资源将保留在Chromium存储库中。用最新的Chromium代码更新它应该不难,我们可以完全控制它。
WebKit.NET包装器
不完全是基于铬和不使用V8发动机,所以它不是真正的一个选择。
还有其他我可能忽略的选择吗?
我将非常感谢如果有人分享她/他的经验与以上任一选项的真实生活,生产质量的WPF项目。您是否有任何集成、许可或部署方面的影响?谢谢.
[编辑]我也要感谢artlung提供了慷慨的赏金,给了这个问题一个推动。
前一段时间我们也遇到了同样的挑战。我们希望使用基于WPF并支持.NET3.5的CEF3开源库。
首先,CEF的作者自己在这里列出了针对不同语言的绑定。
其次,我们继续进行开源的.NET CEF3绑定,它被称为Xilium.CefGlue,并取得了很好的成功。在某些东西不能如您所期望的那样工作的情况下,author通常会对内置的bitbucket跟踪器中打开的问题做出非常迅速的响应
到目前为止,它对我们很有用。作者更新了他的库,以支持最新的CEF3版本和定期的bug修复。
您已经列出了最值得注意的嵌入铬的解决方案(CEF、Chrome Frame、Awesomium)。没有更多的项目是重要的。
仍然存在着Berkelium项目(参见Berkelium Sharp和Berkelium Managed),但它却是一个老版本的铬。
CEF是您最好的选择--它是完全开源的,并且经常更新。这是唯一的选项,允许您嵌入最新版本的Chromium。现在Per Lundberg正积极致力于将CEF3移植到CefSharp上,这是未来的最佳选择。还有Xilium.CefGlue,但它为CEF提供了一个低级别的API,它绑定到CEF的C API。另一方面,CefSharp绑定到CEF的C++API。
Adobe并不是使用CEF的唯一主要参与者,请参阅CEF维基百科页面上使用CEF的其他显著应用程序。
更新Chrome框架是毫无意义的,因为该项目已经退休。
本文向大家介绍C# WPF ListView控件的实例详解,包括了C# WPF ListView控件的实例详解的使用技巧和注意事项,需要的朋友参考一下 C# WPF ListView控件的实例详解 C#的WPF作为现在微软主流的桌面程序开发平台,相比过去的MFC时代,有了非常多的不同。本人刚从MFC平台转过来,以为可以轻松上手,哪知碰到了很多问题,十分不解。不得不乖乖回去看了本书,再继续回到边左边
问题内容: 我可以将Java控件(SWT,Swing等)放在C#控件上吗? 我知道Web控件是可能的,但我不喜欢这种方式。 问题答案: 我重新检查了一下,看来IKVM当前在其AFT组件中没有足够的支持。我认为,执行所需操作的唯一方法是在具有隐藏主窗口的单独进程中运行java控件,并以某种方式将该控件的句柄传递给C#应用程序。 原始答案: 我不确定是否可以“添加”它,但是可以尝试以下方法: 有必要通
本文向大家介绍WPF中引入WindowsForms控件的方法,包括了WPF中引入WindowsForms控件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WPF中引入WindowsForms控件的方法。分享给大家供大家参考,具体如下: 环境: [1]WindowsXP with SP3 [2]VS2008 with SP1 正文: Step1:在现有工程中引入Windows For
本文向大家介绍WPF实现带全选复选框的列表控件,包括了WPF实现带全选复选框的列表控件的使用技巧和注意事项,需要的朋友参考一下 本文将说明如何创建一个带全选复选框的列表控件。其效果如下图: 这个控件是由一个复选框(CheckBox)与一个 ListView 组合而成。它的操作逻辑: 当选中“全选”时,列表中所有的项目都会被选中;反之,取消选中“全选”时,所有项都会被取消勾选。 在列表中选中部分数据
问题内容: 我很困惑何时选择存储过程而不是代码中的嵌入式SQL 当我用谷歌搜索时,我发现了这些要点 它们允许模块化编程。 它们可以减少网络流量。 它们可以用作安全机制。 请告诉我网络流量与之有何关系? 问题答案: 他们可以通过仅将所需的数据返回给客户端来减少网络流量。 或扭转它;浪费网络流量的一种设计/编码实践是从数据库中选择一组数据,将其返回给客户端,然后在其中对某些数据集进行处理。显然,如果您
问题内容: 您对此设计决定有何看法?它有什么优点和缺点? 链接: 嵌入说明 问题答案: 在注释中,您想知道嵌入的想法是否足以“完全替换继承”。我会说这个问题的答案是“是”。几年前,我使用名为Snit的Tcl OO系统进行了非常简短的介绍,该系统使用组合和委派来排除继承。Snit与Go的方法仍然有很大不同,但是在这一方面,它们具有一些共同的哲学基础。这是一种将功能和职责结合在一起的机制,而不是类的层