ответ

0

Ошибка вы получаете вызвано следующим сценарием

foreach(var item in collection) 
{ 
    collection.Add(newItem); // will set up the error 
    collection.Remove(item); // will set up the error 
} 

Приведенный выше код на самом деле компилирует к чему-то как это:

IEnumerator iEnum = collection.GetEnumerator(); 

while (iEnum.GetNext()) 
{ 
    var item = iEnum.Current; 

    collection.Add(newItem); // will set up the error 
    collection.Remove(item); // will set up the error 
} 

вы не получите ошибку, пока не попробуешь, чтобы получить следующий пункт (то есть в начале следующего петля). При изменении любого IEnumerable коллекции вы должны покинуть петлю и не вызвать GetNext() элемент, возвращаемый IEnumerator объекта, возвращенного IEnumerable

Так что, если где-то в коде, при выполнении, скажем Players коллекции вы сделать что-то, что вызывает необходимо внести в архив Players вы получите ошибку.

+0

Но я не понимаю, почему работает начальный запуск (как только я запускаю приложение). Ошибка возникает только во второй раз, когда она запускается (на этот раз через таймер). Как мне пойти дальше и решить это в моем сценарии и оставить цикл как в вашем примере? есть ли, возможно, еще лучший способ сделать это без асинксов в первую очередь? –

+0

Я не понимаю, что я делаю неправильно во втором цикле foreach (если это тот, о котором вы говорите): 'foreach (var character in Players)' Все, что я делаю, устанавливает переменные перед вставкой данных в мой db –

Смежные вопросы