plusieurs hits en boucle après la commande break

J’ai un problème étrange. Je crée un NUI pour l’application et j’ai lié quelques gestes simples aux flèches droite et gauche. Le problème est quand je commence l’application. Quand je fais un geste pour la première fois, mon application frappe 2 fois de suite. Après cela fonctionne à 100% comme je veux. Seul le début est le problème.

J’ajoute deux joints et un horodatage à ma structure d’historique qui est placée dans la liste de tableaux

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

puis en boucle foreach je compare les données

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

Si ça frappe je casse instantanément le lopp avec

 break; 

après cela j’efface l’historique ArrayList

 this._history.Clear(); 

Donc je ne comprends pas. Pourquoi après le début, ça frappe deux fois de suite?

// modifier

initialisation de l’historique ArrayList

 private List _history = new List(16); 

en boucle

 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; } } 

À présent. Comme vous pouvez le voir, je me casse ici. Donc, ce code ne devrait pas être invoqué une deuxième fois de suite

Comment cela efface quelque chose

// éditer 2

J’appendai également que pour entrer dans cette partie du code, le drapeau gestureStart doit être défini sur true. Comme vous pouvez le voir après être entré dans la partie ‘if’ ici, je le règle sur false. Il est donc impossible que le code puisse arriver instantanément à cette partie

// édition 3 Contournement de travail

J’ai créé une sorte de solution de contournement. J’ai ajouté le contrôle du temps. Je compare l’horodatage d’invocation du code et l’horodatage de la reconnaissance du dernier geste. Si c’est trop rapide (j’ai encore quelques ms qu’il est impossible de faire), je n’autorise pas de bash une flèche. Je ne sais pas si c’est une solution parfaite, mais c’est une solution qui fonctionne

Ok mon problème était le code. Ofc un petit bug introuvable dans le débogage. J’ai utilisé une fonction pour parsingr une histoire de frameworks.

La méthode fonctionnait dans 2 modes. J’ai détaché cela et créé 2 méthodes différentes, chacune pour chaque tâche et maintenant cela fonctionne très bien