J'ai cette fonction de minuterie, il me donne l'exception suivante.
La collection a été modifiée; opération d'énumération ne peut pas exécuter une fois que je supprime l'objet de la table de hachage.La collection a été modifiée; opération d'énumération peut ne pas exécuter pour hashtable
quelle est la solution à mettre en œuvre des fonctionnalités similaires
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);
}
}
}
Il est important de souligner que la sécurité du filetage n'est pas vraiment un facteur important ici. Vous obtiendriez la même erreur sans tenir compte du fait qu'un thread ou plusieurs threads se mêlaient de l'énumération de votre collection. (Bien sûr, je peux voir pourquoi vous voulez le limiter à un seul thread.) – razlebe