Enumerating through a collection is not a thread-safe procedure intrinsically. Even when a collection is synchronized, other threads can still modify the collection. This causes exceptions during enumeration.
Lock the collection by using the SyncRoot method during the whole enumeration to guarantee thread safety. For detailed information about locking collections for thread-safe access, see ICollection.SyncRoot.