C# WPF多点触摸-如何获取所有接触点?
我们正在评估触摸屏键盘,其中一款需要同时跟踪10个手指。问题是触摸屏驱动程序非常不稳定(而且没有固定版本)。对于如此多的手指,它每秒为C# WPF多点触摸-如何获取所有接触点?,c#,wpf,events,multi-touch,touchscreen,C#,Wpf,Events,Multi Touch,Touchscreen,我们正在评估触摸屏键盘,其中一款需要同时跟踪10个手指。问题是触摸屏驱动程序非常不稳定(而且没有固定版本)。对于如此多的手指,它每秒为FrameReported事件发送2500多个事件。根本没有办法处理所有这些问题,即使我们一开始就放弃了90%。要跟上这些数据并做任何有意义的事情是根本不可能的 我没有使用System.Windows.Input.Touch.FrameReported,而是尝试使用窗口的(预览)TouchMove事件;这里也有同样的问题 所以现在我想在一个单独的线程中进行投票,而
FrameReported
事件发送2500多个事件。根本没有办法处理所有这些问题,即使我们一开始就放弃了90%。要跟上这些数据并做任何有意义的事情是根本不可能的
我没有使用System.Windows.Input.Touch.FrameReported
,而是尝试使用窗口的(预览)TouchMove
事件;这里也有同样的问题
所以现在我想在一个单独的线程中进行投票,而不是使用事件,但是我找不到关于如何获取所有当前接触点的信息
我唯一发现的是WinForms黑客,但这不是一个选项,因为那样我将无法在我的窗口中呈现任何WPF控件
有什么解决办法吗
编辑1:
这是处理所有移动事件的代码:
private void UserControlTouchMove(object sender, TouchEventArgs e)
{
//Update Position of the corresponding point
var touch = e.GetTouchPoint(this);
var id = touch.TouchDevice.Id;
e.Handled = true;
var position = touch.Position;
//update finger on display, quick and dirty
if (m_ShowFingers)
{
foreach (var finger in m_Fingers)
{
if (id == (int)finger.DataContext)
{
finger.RenderTransform = new TranslateTransform(position.X - HalfFingerSize, position.Y - HalfFingerSize);
break;
}
}
}
}
报道这么多事件是正常的。在TouchEventArgs上,您不能只处理它并捕获触摸设备,这样您就可以独立捕获所有10个设备。。。e、 已处理=正确;还有这个。CaptureTouch(即TouchDevice);之后您可以检查事件的id是否与前一个相同。。。或者我不明白你的问题,我已经添加了方法。我真的不知道为什么我不能继续处理这些事件。我甚至还没有对这些数据做任何想象。这一切都很好,最多5个手指,但然后事件只是堆积起来。