Oggi nel newsgroup Microsoft su VB.NET e' stato chiesto come scorrere l'elenco dei subscribers ad un determinato evento. La risposta era alquanto semplice: Utilizzare la GetInvocationList() esposta dalla classe Delegate.
L'equivalente in C# era qualcosa tipo:

public class Clock
{
public delegate void TickDelegate();
public event TickDelegate Tick;
public void DoTest()
{
foreach(System.Delegate d in Tick.GetInvocationList()){
 d.DynamicInvoke(null);
}
}
L'equivalente in VB.NET:

Public Class Clock
 Public Event Tick()
 Public Sub DoClick()
 For Each del As [Delegate] In ???
  del.DynamicInvoke(Nothing)
 Next
 End Sub
End
Class

Il problema era come recuperare il delegate che VB.NET crea per noi quando creiamo un evento, dopo qualche prova non andata a buon fine (ho provato tutto quello che Reflection mi metteva a disposizione...) ho lanciato ILDasm e ho scoperto che il Delegate che VB.NET crea ha lo stesso nome dell'Evento con l'aggiunta di Event percio al posto di ??? bastava mettere TickEvent ovvero

Public Sub DoClick()
For Each del As [Delegate] In TickEvent.GetInvocationList
 del.DynamicInvoke(Nothing)
Next

Se dovesse capitarvi ricordatevi di questo dettaglio....