Attento che (se ho capito cosa stai facendo) usi un delegato non per il problema della concorrenza, ma per il problema che sei su thread differenti.
Il problema della concorrenza con quel codice rimane secondo me, nella funzione dovresti usare un lock(con i problemi che comporta).
"Magari" cambierei anche la struttura(sembra un tipico caso di Observer).
Per il tuo problema specifico prova a guardare la "reflection".