Per quello che vuoi fare tu mi sembra abbastanza funzionale ma è il principio che mi sfugge.
Chi ti vieta di leggere tutta la cartella in una lista nel trhead e ottenere un file per volta dalla lista?
Fra l'altro, non penso che la GetFiles nella foreach già avviata tenga conto di file aggiunti/rimossi durante l'enumerazione ...