CefSharp WinForms浏览器托管在WPF WinFormsHost中

时间:2015-12-02 16:29:51

标签: c# cefsharp

我正在努力将运行Awesomium的自助服务终端软件转移到CefSharp上。 我们的主要应用程序是用WPF编写的,这项工作使用的是CefSharp的v45

我知道WPF控件有一些严重的性能问题,当与WindowsFormsHost中托管的WinForms版本并排比较时,转换的平滑性等要好得多。

为此,我希望坚持使用这种方法将WinForms ChromiumWebBrowser嵌入到WPF窗口的WindowsFormsHost中。这一切都有效,但是我遇到了触摸支持工作的问题。 我们的自助服务终端具有触摸屏并运行Windows 7 / 8.1,触摸功能与WPF控件完美配合,但是当使用WinForms嵌入式时,一触即可完成。 除了触摸不工作之外,它还会窃取所有键盘事件并在内部消耗它们,因为我的事件处理程序都没有在主WPF窗口上触发。

如果有人有任何想法或者可以指出我正确的方向尝试解决这个问题,那将非常感激!

由于

1 个答案:

答案 0 :(得分:0)

您所谈论的场景得不到很好的支持,因此没有太多信息。您看到的很多问题可能是因为CEF在单独的线程中运行它的消息循环。如果您关闭MultiThreadedMessageLoop,则您有责任致电Cef.DoMessageLoopWork()。我最近添加了WinForms Example的粗略演示。您可以将其移至WPF,但我从未尝试过。

你在那里有一些未知的领域,所以你必须自己完成大部分的腿部工作。

作为参考,有一些方法可以提高WPF性能。但它们有各自的缺点。见https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefExample.cs#L58