CefSharp WinForms浏览器托管在WPF WinFormsHost中

本文关键字:WPF WinFormsHost WinForms 浏览器 CefSharp | 更新日期: 2023-09-27 18:25:25

我目前正在将运行Awesomium的kiosk软件移到CefSharp上。我们的主要应用程序是用WPF编写的,这项工作是使用CefSharp 的v45

我知道WPF控件存在一些严重的性能问题,与WindowsFormsHost中托管的WinForms版本相比,转换的平稳性等要好得多。

为此,我希望坚持这种方法,将WinForms ChromiumWebBrowser嵌入WPF窗口上的WindowsFormsHost中。这一切都很有效,但我在工作中遇到了联系支持的问题。我们的信息亭有触摸屏,运行Windows 7/8.1,触摸与WPF控件完美配合,但当使用嵌入的WinForms时,单点触摸根本不起作用。除了触摸不起作用外,它还窃取了所有键盘事件并在内部消耗它们,因为我的事件处理程序从未在WPF主窗口上启动过。

如果有人有任何想法,或者能给我指明正确的方向来尝试解决这个问题,我们将不胜感激!

感谢

CefSharp WinForms浏览器托管在WPF WinFormsHost中

您谈论的场景没有得到很好的支持,因此没有太多信息。您看到的很多问题可能是因为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