2015-12-02 724 views
0

我目前正在移出运行Awesomium而不是CefSharp的自助服务终端软件。 我们主要的应用程序是用WPF和相比并排侧的WindowsFormsHost主办的WinForms的版本,这项工作是用CefSharp在WPF中托管的CefSharp WinForms浏览器WinFormsHost

我知道,WPF控件有一些严重的性能问题,的V45,转换的平滑性等更好。

为了达到这个目的,我正在使用这种将WPF窗口中的WinForms ChromiumWebBrowser嵌入到WindowsFormsHost中的方法。这一切工作,但我有问题获得触摸支持工作。 我们的信息终端具有触摸屏并运行Windows 7/8.1,该触摸可以完美地与WPF控件配合使用,但是当使用嵌入式WinForms时,单触无法使用。 除了触摸不工作以外,它还会窃取所有键盘事件并在内部使用它们,因为我的事件处理程序在主WPF窗口上都没有触发。

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

感谢

回答

0

你说的不是很好的支持,因此该方案没有大量的信息。你看到的很多问题都可能是因为CEF正在运行它的消息循环在一个单独的线程中。如果您关闭MultiThreadedMessageLoop,那么您将负责拨打Cef.DoMessageLoopWork()。我最近添加了一个粗略的演示WinForms Example。你可能会将其移植到WPF,尽管我从未尝试过。

您在一定程度上未知的领域在那里,所以你要做的最腿部的工作你自己。

仅供参考,有些方法可以提高WPF的性能。他们虽然有自己的一套缺点。见https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefExample.cs#L58

+0

感谢您的回复! 我已经尝试过那些WPF性能改进,并且它们确实有一个效果,一个非常明显的事实。问题是,当你随后在WinFrame上自己测试或者在WPF中进行测试时,那里的速度似乎再次突飞猛进。 我会看看是否可以获得关于消息循环的各个部分,以及您的示例使用WPF,如果我有任何运气,然后我会让你知道。 – OpticFroggy

+0

因此,在WinFormsHost中运行它,然后显式调用DoMessageLoopWork()似乎解决了部分问题。这样做可以使输入事件在WPF图层中启动,所以我现在可以快速打开开发工具和其他特定应用程序。有什么方法可以将这些事件中的一些事件作为触摸事件插入到CefSharp浏览器中?我能看到的唯一相关的方法是SendMouseWheelEvent。 – OpticFroggy

+0

开箱即用,触摸支持尚未在上游实施。见https://bitbucket.org/chromiumembedded/cef/issues/1059/cef3-multi-touch-support-with-offscreen和https://github.com/cefsharp/CefSharp/pull/1418 – amaitland

相关问题