No, allora dovevi spiegare il tuo problema con maggiore chiarezza

Non è quella la strada da percorrere perché riesci ad intercettare la creazione dell'enumeratore ma non il suo utilizzo. Se sei sul framework 4.0 puoi utilizzare le collection di System.Collections.Concurrent che sono threadsafe e supportano enumerazioni in ambiti multithreading.
Diversamente, io fossi in te intercetterei la richiesta di un Enumerator come ti ho mostrato, per creare uno snapshot della collection in quell'istante. Quindi
1) lock
2) crei una collection inizializzandola con gli elementi della tua collezione
3) restituisci l'enumerator della collection del punto 2
4) release del lock
Fammi sapere

Ciao,
m.