Je n'ai pas utilisé Queues<T>
à un degré réel avant, donc je pourrais manquer quelque chose évidente. Je suis en train de parcourir un Queue<EnemyUserControl>
comme celui-ci (toutes les images):boucle Queue ForEach lancer InvalidOperationException
foreach (var e in qEnemy)
{
//enemy AI code
}
Quand un ennemi meurt, le contrôle utilisateur ennemi déclenche un événement que je suis abonné et je le faire (le premier ennemi dans la file d'attente est supprimé par la conception):
void Enemy_Killed(object sender, EventArgs e)
{
qEnemy.Dequeue();
//Added TrimExcess to check if the error was caused by NULL values in the Queue (it wasn't :))
qEnemy.TrimExcess();
}
Cependant, après la méthode Dequeue est appelée, je reçois un InvalidOperationException
sur la boucle foreach
. Lorsque j'utilise Peek
à la place, il n'y a pas d'erreurs donc il doit faire quelque chose avec le changement de la file d'attente elle-même puisque Dequeue supprime l'objet. Ma première supposition est que c'est se plaindre que je modifie une collection qui est itérée par l'énumérateur, mais la dequeuing est effectuée en dehors de la boucle?
Toutes les idées ce qui pourrait être la cause de ce problème?
Merci
Vous devez utiliser 'while (queue.Any()) queue.Dequeue();' – Telemat