2009-09-21 15 views
12

Ultimamente ho lavorato su un progetto che fa ampio uso di eventi. Una delle cose che devo fare è chiamare in modo asincrono più gestori di eventi su un delegato multicast. Ho pensato che il trucco sarebbe stato di chiamare BeginInvoke su ogni oggetto da GetInvocationList, ma sembra come se BeginInvoke non esistesse lì.Delegati multicast asincroni

C'è un modo per farlo o devo iniziare a utilizzare ThreadPool.QueueUserWorkItem e ordinare il rollover della mia soluzione in questo modo?

risposta

19

GetInvocationList restituisce semplicemente un array di tipo Delegate che non conosce la firma appropriata. Tuttavia, è possibile castare ogni valore restituito al tipo di delegato specifico:

foreach (MyDelegate action in multicast.GetInvocationList()) 
{ 
    action.BeginInvoke(...); 
} 
+0

D'oh! Ovviamente! Grazie mille, Jon. :) –