【问题标题】:Application, improve performance of touch events应用,提高触摸事件的性能
【发布时间】:2012-01-13 20:09:55
【问题描述】:

基本上,我有一个 8000 x 8000 像素的应用程序。我们可以放大以查看特定部分,例如收音机,或者我们可以缩小以查看所有内容。

汽车的每个部分都是一个控件,我们可以用手指在双点触控或多点触控显示器上进行操作。

我的问题是:为了操作一个控件,例如音量按钮,用户需要像在现实生活中一样移动鼠标,所以要进行圆周运动。 有了鼠标,一切都完美无缺,它会立即响应,不会有任何延迟。我使用 OnMouseLeftButtonDown、OnMouseMove 等。 触摸时,计算机似乎很难获得触摸位置,并且有很大的延迟,尤其是当用户用 2 个手指同时移动 2 个不同的按钮时。我使用 OnTouchDown、OnTouchMove 等...

鼠标和触摸的唯一区别是当我们需要获取位置时,我使用的是鼠标:(e 是 MouseButtonEventArgs)

Point currentPosition = e.GetPosition(this);

通过我使用的 Touch:(e 是一个 TouchEventArgs)

Point currentPosition = e.GetTouchPoint(this).Position;

这之后的一切都是一样的。

我不知道是因为我在我的应用程序中有太多控件(我们可以操作超过 5000 个,但是当我们放大只有 2 个控件时它是同一件事)还是因为它真的很难计算机从触摸事件中获取位置....

有人可以帮我解决这个问题吗?我需要找到一个解决方案来消除滞后。

我使用 Visual Studio 2010、Blend 4、.NET 4.0 Windows 7 64 位 7 Gb 内存 至强 2.13 Ghz,2 核,8 线程 屏幕:ELO 技术,在 NEC 2490WUXi2 屏幕中

【问题讨论】:

  • 如果鼠标一切正常,并且您在操作控件时没有任何延迟,那么我会说罪魁祸首是触摸设备驱动程序。我认为它无法跟上手指速度,因此会引入您注意到的滞后。我已经在某些触摸硬件中看到了这个问题,并且我使用了其他具有完美响应能力的触摸硬件,所以我可以自信地说这个问题与 WPF 或触摸本身无关,它只是为你的触摸实现驱动程序的方式设备。
  • 我建议您尝试使用 Microsoft Surface SDK 附带的 Microsoft Touch Simulator。它当然可以与鼠标一起使用,从这个意义上说,正如 Murven 所提到的,如果使用模拟器接收和响应触摸事件没有滞后,那么滞后源于多点触控驱动程序
  • OnTouchMove 事件与 OnMouseMove 事件的频率是多少?换句话说,OnTouchMove 是否每秒被触发 1000 次,而 OnMouseMove 可能每秒被触发 10 次?
  • 触控硬件是否可以配置为兼容双点触控(如 iPhone?)。这会在报告事件之前导致奇怪的延迟,而触摸界面会尝试确定触摸是真正独立的还是只是手势的第一部分。如果任何地方都有这样的配置选项(很可能在触摸界面驱动程序中),请尝试将其关闭。

标签: c# wpf performance touch multi-touch


【解决方案1】:
【解决方案2】:

很难说你为什么会遇到这样的问题——可能是 OnTouchMove 比 MouseMove 更频繁地被触发,你应该创建一些额外的处理来平滑触摸位置数据。 我会尝试评论下的所有代码 点 currentPosition = e.GetTouchPoint(this).Position;

看看性能。

另一种方法是计算触发了多少 OnTouchMove。

【讨论】:

    【解决方案3】:

    问题出在触控设备上,换一个试试看是否还有延迟。

    【讨论】:

    • 你为什么不让 Murven 得到公认的答案。这是他在评论中已经说过的。
    • 他没有写答案,我不能
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多