应用程序,提高触摸事件的性能

14
基本上,我有一个应用程序,它的尺寸是8000px x 8000px。我们可以放大以查看特定部分,例如收音机,或者缩小以查看所有内容。
汽车的每个部分都是一个控件,我们可以使用手指在双触摸或多点触控监视器上操纵它们。
我的问题是:为了操作控件,例如音量按钮,用户需要像在现实生活中一样精确地移动鼠标,即进行圆形运动。 鼠标方面一切都很完美,它立即响应而没有任何延迟。我使用OnMouseLeftButtonDown、OnMouseMove等方法。 但在触摸方面,似乎计算机很难获取触摸位置,并且存在巨大的延迟,尤其是当用户同时使用两个手指移动两个不同的按钮时。我使用OnTouchDown、OnTouchMove等方法...
鼠标和触摸之间唯一的区别在于需要获取位置时,对于鼠标,我使用以下内容:(e是MouseButtonEventArgs)
Point currentPosition = e.GetPosition(this);

我使用的是Touch:(e是TouchEventArgs)

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

这句话后面的所有内容都一样。

我不知道是因为我的应用程序中控件太多了(超过5000个),还是因为计算机很难从触摸事件中获取位置....当我们只放大两个控件时也是同样的情况。

有人能帮我解决这个问题吗?我需要找到一个解决办法来消除延迟。

我使用的是Visual Studio 2010,Blend 4,.NET 4.0 Windows 7 64位 7 Gb RAM Xeon 2.13 Ghz, 2核心,8线程 屏幕:ELO技术,在NEC 2490WUXi2屏幕上。


11
如果鼠标操作一切正常,没有任何延迟,那么罪魁祸首应该是触摸设备驱动程序。我认为它无法跟上手指的速度,因此会出现你所注意到的延迟。我曾在某些触摸硬件上遇到过这个问题,并且我使用其他触摸硬件时响应完美,所以我可以自信地说,这个问题与 WPF 或触摸本身无关,只是驱动程序实现方式有问题。 - Murven
1
我建议您尝试使用随附Microsoft Surface SDK的Microsoft Touch模拟器。当然,它也可以使用鼠标。正如Murven所提到的那样,如果使用模拟器接收和响应触摸事件时没有延迟,则延迟来自多点触控驱动程序。 - Tarek Khalil
OnTouchMove事件与OnMouseMove事件的频率是多少?换句话说,OnTouchMove被触发1000次每秒,而OnMouseMove可能只有10次每秒吗? - Snixtor
有可能触摸硬件被配置为兼容双触(像 iPhone 一样)吗?这会导致在报告事件之前出现奇怪的延迟,因为触摸界面试图确定触摸是否真正是独立的,还是手势的第一部分。如果有这样的配置选项(最有可能在触摸界面驱动程序中),请尝试关闭它。 - Chuck Kollars
3个回答

4

1
请投票支持此 Bug!https://connect.microsoft.com/VisualStudio/feedback/details/782456/wpf-touch-event-fires-with-delay - Andreas

1
很难说你为什么会遇到这样的问题 - 可能是OnTouchMove比MouseMove触发得更频繁,因此您应该创建一些额外的处理程序来平滑触摸位置数据。 我建议注释掉以下代码块: Point currentPosition = e.GetTouchPoint(this).Position;
并查看性能。
另一种方法是计算OnTouchMove被触发的次数。

1
问题出在触摸设备上,尝试更换另一个设备,看看是否仍然存在延迟。

为什么不让Murven获得采纳的答案。这就是他在评论中已经说过的。 - Mare Infinitus
他没有写答案,我无法。 - mlemay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接