我正在努力将运行Awesomium的自助服务终端软件转移到CefSharp上 . 我们的主要应用程序是用WPF编写的,这项工作使用的是CefSharp的v45
我知道WPF控件有一些严重的性能问题,当与WindowsFormsHost中托管的WinForms版本并排比较时,转换的平滑性等要好得多 .
为此,我希望坚持使用这种方法将WinForms ChromiumWebBrowser嵌入到WPF窗口的WindowsFormsHost中 . 这一切都有效,但是我遇到了触摸支持工作的问题 . 我们的自助服务终端具有触摸屏并运行Windows 7 / 8.1,触摸功能与WPF控件完美配合,但是当使用WinForms嵌入式时,一触即可完成 . 除了触摸不工作之外,它还会窃取所有键盘事件并在内部消耗它们,因为我的事件处理程序都没有在主WPF窗口上触发 .
如果有人有任何想法或者可以指出我正确的方向来尝试解决这个问题,那将非常感激!
谢谢
1 回答
你所谈论的场景得不到很好的支持,因此没有太多的信息 . 您看到的很多问题很可能是因为
CEF
在单独的线程中运行它的消息循环 . 如果您关闭MultiThreadedMessageLoop
,那么您将负责调用Cef.DoMessageLoopWork()
. 我最近添加了一个粗略的演示WinForms Example
. 您可以将此端口移至WPF
,尽管我从未尝试过 .https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefExample.cs#L76
https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.WinForms.Example/Program.cs#L37
你在那里有一些未知的领域,所以你必须自己完成大部分的腿部工作 .
作为参考,有一些方法可以改善
WPF
性能 . 但它们有各自的缺点 . 见https://github.com/cefsharp/CefSharp/blob/cefsharp/45/CefSharp.Example/CefExample.cs#L58