Voglio sollevare una serie di eventi dal mio corso di biblioteca, ma sono preoccupato che alcuni sottoscrittori di eventi siano maleducati e impieghino molto tempo per elaborare alcuni eventi, bloccando così il thread che sta generando gli eventi. Pensavo di poter proteggere il filo raccolta utilizzando un thread pool di thread per raccogliere ogni evento:Posso usare BeginInvoke con MulticastDelegate?
if (packet != null && DataPacketReceived != null)
{
var args = new DataPacketEventArgs(packet);
DataPacketReceived.BeginInvoke(this, args, null, null);
}
che funziona bene quando c'è solo un abbonato alla manifestazione, ma non appena un secondo abbonato arriva, DataPacketReceived
DIVENTA delegato multicast e ottengo un'eccezione di argomento con il messaggio di errore "Il delegato deve avere un solo target". C'è un modo semplice per aumentare l'evento su un thread separato, o devo avviare un thread e quindi generare l'evento da lì?
corretta, ma è da notare che la chiamata 'BeginInvoke' su ogni singolo abbonato non significa necessariamente che ogni verrà eseguito su un thread separato. È il business del pool di thread. – Ani
Ho osservato questo problema un paio di volte negli ultimi giorni, È importante notare che gli oggetti in 'ricevitori' non sono in realtà di tipo' EventHandler ', questo è un cast esplicito. –