Ошибка вы получаете вызвано следующим сценарием
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
вы получите ошибку.
Но я не понимаю, почему работает начальный запуск (как только я запускаю приложение). Ошибка возникает только во второй раз, когда она запускается (на этот раз через таймер). Как мне пойти дальше и решить это в моем сценарии и оставить цикл как в вашем примере? есть ли, возможно, еще лучший способ сделать это без асинксов в первую очередь? –
Я не понимаю, что я делаю неправильно во втором цикле foreach (если это тот, о котором вы говорите): 'foreach (var character in Players)' Все, что я делаю, устанавливает переменные перед вставкой данных в мой db –