У меня есть эта функция таймера, она дает мне следующее исключение.
Коллекция была изменена; операция перечисления может не выполнить после удаления объекта из хеш-таблицы.Коллекция была изменена; операция перечисления может не выполняться для hashtable
что такое решение реализовать аналогичные функциональные возможности
void timerFunction(object data)
{
lock (tMap.SyncRoot)
{
foreach (UInt32 id in tMap.Keys)
{
MyObj obj=(MyObj) runScriptMap[id];
obj.time = obj.time -1;
if (obj.time <= 0)
{
tMap.Remove(id);
}
}
}
Стоит отметить, что безопасность потоков на самом деле не является фактором. Вы получите ту же ошибку, независимо от того, вмешивался ли один поток или несколько потоков в вашу среднюю перечисление коллекции. (Хотя, конечно, я вижу, почему вы хотите ограничить его одним потоком.) – razlebe