Похоже, что-то должно изменить базовую коллекцию строк, следовательно, сделать недопустимым ваше перечислимое значение.
Если вы преобразуете перечислимое в список, используя .ToList()
(это приведет к тому, что перечислимое будет итерироваться и появится новый списоксодержащий элементы в оригинале), вы сможете перебирать это новое перечисление, и изменения в источнике не повлияют на вас.
foreach (UltraGridRow row in uGridCache.Rows.ToList())
{
....
workerThread.ReportProgress(0, rowValues);
}
Вы должны знать, что если что-то еще изменится,строк в сетке, ваш ReportProgress может сообщать о прогрессе чего-то, чего больше нет в сетке, вы можете проверить в своем обработчике ReportProgress, действительны ли отчеты о прогрессе для этого элемента, прежде чем делать то, что вы делаете.