break命令后循环中多次命中

我有一个奇怪的问题。 我正在为应用程序创建一个NUI,我将一些简单的手势绑定到右箭头和左箭头。 问题是当我开始申请时。 当我第一次做出手势时,我的应用程序连续击中了2次。 之后它按我的要求100%工作。 只有开始才是问题所在。

我将两个Joints和timestamp添加到我的history结构中,该结构放入ArrayList中

this._history.Add(new HistoryItem() { timestamp = timestamp, activeHand = hand, controlJoint = controlJoint } ); 

然后在foreach循环中我正在比较数据

 if (Math.Abs((hand.Position.X - item.controlJoint.Position.X)) < MainWindow.treshold && Math.Abs((hand.Position.Y - item.controlJoint.Position.Y)) < MainWindow.verticalTreshold) 

如果它击中了我立刻打破了lopp

 break; 

之后我清除历史ArrayList

 this._history.Clear(); 

所以我不明白。 为什么在开始后连续两次击中?

//编辑

history ArrayList初始化

 private List _history = new List(16); 

在循环中

 foreach (HistoryItem item in this._history) { if ((hand.Position.X - item.controlJoint.Position.X) < MainWindow.treshold) { float tmp = (hand.Position.X - controlJoint.Position.X); MainWindow.slideNumber++; this._logger.Log("Next slide: " + MainWindow.slideNumber); this._logger.Log(hand.Position.X + " - " + controlJoint.Position.X + " = " + tmp + " | " + MainWindow.treshold); this.startTime = 0; this.gestureStart = false; answerFlag = true; System.Windows.Forms.SendKeys.SendWait("{Right}"); break; } } 

现在。 你可以看到我在这里打破了。 因此,不应该连续第二次调用此代码

这是如何清除某些东西的

//编辑2

我还要补充一点,为了进入这部分代码,需要将gestureStart标志设置为true。 正如你在进入’if’部分后所看到的那样,我将其设置为false。 所以代码不可能立即进入这一部分

//编辑3 工作替代方法

我已经创建了一种解决方法。 我加入了时间控制。 我正在比较调用代码的时间戳和最后一个手势识别的时间戳。 如果它太快(我几分钟无法制作的话)我不允许打箭头。 我不确定它是否是一个完美的解决方案,但它是一个有效的解决方案

好吧我的问题是代码。 Ofc在调试中无法解决的小错误。 我用一个函数来分析帧的历史。

该方法有两种模式。 我分离了它并创建了两个不同的方法,每个方法用于每个任务,现在它工作得很好