Abbondante uso di thread. Ma quando il background worker finisce il lavoro è il thread UI che si occupa di passare l'insieme "sorgentedati" all' "Oggetto".

Per questo una ipotesi del motivo per cui si verifica la race condition (enumerazione interrotta perchè insieme modificato) è che "Oggetto" stesse enumerando in background mentre l'utente ha fatto partire un successivo background worker che modifica l'insieme "sorgentedati", cosa che sarebbe impossibile se "Oggetto" e l'UI lavorano in un unico thread... mah.