La collection a été modifiée ; l'opération d'énumération ne peut pas s'exécuter

La collection a été modifiée ; l’opération d’énumération ne peut pas s’exécuter

Ce qui se passe probablement, c’est que SignalData modifie indirectement le dictionnaire subscribers sous le capot pendant la boucle, ce qui mène à ce message. Vous pouvez le vérifier en changeant

foreach(Subscriber s in subscribers.Values)

Par

foreach(Subscriber s in subscribers.Values.ToList())

Si j’ai raison, le problème disparaîtra.

L’appel à subscribers.Values.ToList() copie les valeurs de subscribers.Values dans une liste séparée au début du foreach. Rien d’autre n’a accès à cette liste (elle n’a même pas de nom de variable !), donc rien ne peut la modifier à l’intérieur de la boucle.