No he usado Queues<T>
en ningún grado real, por lo que podría estar perdiendo algo obvio. Estoy tratando de repetición de un Queue<EnemyUserControl>
como esto (todos los fotogramas):Queue ForEach loop throwing InvalidOperationException
foreach (var e in qEnemy)
{
//enemy AI code
}
Cuando un enemigo muere, el control de usuario enemigo provoca un evento me he suscrito a y yo hacer esto (el primer enemigo en el cola se elimina por diseño):
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();
}
Sin embargo, después de que el método de quitar de la cola se llama, consigo un InvalidOperationException
en el bucle foreach
. Cuando uso Peek
en su lugar, no hay errores, por lo que tiene que hacer algo con el cambio de la cola en sí, ya que Dequeue quita el objeto. Mi conjetura inicial es que se está quejando de que estoy modificando una colección que está siendo iterada por el Enumerator, ¿pero la dequeración se está realizando fuera del ciclo?
¿Alguna idea de lo que podría estar causando este problema?
Gracias
Debe utilizar 'while (queue.Any()) queue.Dequeue();' D – Telemat