C# 托管在WPF WinFormsHost中的CefSharp WinForms浏览器

C# 托管在WPF WinFormsHost中的CefSharp WinForms浏览器,c#,cefsharp,C#,Cefsharp,我目前正在将运行Awesomium的kiosk软件迁移到CefSharp上。 我们的主要应用程序是用WPF编写的,这项工作使用的是CefSharp的v45 我知道WPF控件有一些严重的性能问题,当与WindowsFormsHost中托管的WinForms版本并行比较时,转换的平滑度等要好得多 为此,我希望坚持将WinForms ChromiumWebBrowser嵌入WPF窗口上的WindowsFormsHost中。这一切都是可行的,但是我在工作中遇到了接触支持方面的问题。 我们的信息亭有触摸屏

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

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

为此,我希望坚持将WinForms ChromiumWebBrowser嵌入WPF窗口上的WindowsFormsHost中。这一切都是可行的,但是我在工作中遇到了接触支持方面的问题。 我们的信息亭有触摸屏,运行Windows 7/8.1,触摸功能与WPF控件完美结合,但是当使用WinForms嵌入的one touch根本不起作用。 除了触摸不工作之外,它还窃取所有键盘事件并在内部使用它们,因为我的事件处理程序中没有一个会在主WPF窗口上启动

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


谢谢

您所说的场景没有得到很好的支持,因此没有太多的信息。您看到的许多问题可能是因为
CEF
在一个单独的线程中运行它的消息循环。如果您关闭了
多线程MessageLoop
,那么您将负责调用
Cef.DoMessageLoopWork()
。我最近在
WinForms示例中添加了一个粗略的演示。您可能可以将其移植到
WPF
,尽管我从未尝试过

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


有一些方法可以改进
WPF
性能,以供参考。但它们也有自己的缺点。请参见

谢谢您的回复!我尝试过这些WPF性能改进,它们确实有效果,事实上是一个非常明显的效果。问题是,当您在WinForms上单独或在WPF中托管时,与WinForms并排测试时,速度似乎再次跃升。我将研究一下是否可以获得消息循环和您的示例的各种信息,以便与WPF一起使用,如果运气好,我会告诉您。因此,在WinFormsHost中运行它,然后显式调用DoMessageLoopWork()似乎可以解决部分问题。这样做可以在WPF层触发输入事件,因此我打开开发工具的快捷方式和其他特定于应用程序的东西现在都可以工作了。是否有任何方法可以将这些事件中的某些事件作为触摸事件注入到浏览器中?我能看到的唯一模糊相关的方法是SendMouseWheelEvent。没有现成的东西,触摸支持还没有在上游实现。看,啊,我想我在搜索中看到了一些东西,在这种情况下,你认为通过简单的鼠标点击来传递触摸“点击”是可行的吗?我不明白为什么这样不行,我只需要确定如何/在哪里注入或映射事件。您可能可以发布
WP\u Touch
消息