Ho un evento in C#. Ci sono cinque abbonati per quello. Tutti gli abbonati sono classi diverse. Ma mentre sollevo l'evento voglio che non tutto il sottoscrittore/gestore debba essere informato per gestire questo evento. Dovrei avere un meccanismo di filtraggio e quindi solo gli abbonati rimanenti dovrebbero essere avvisati. Quale potrebbe essere il modo migliore per raggiungere questo obiettivo?C# Filtraggio lista invocazione evento
risposta
Se si desidera farlo con il proprio esistente, è sufficiente ripetere l'elenco di chiamate sull'evento.
var list = localHandler.GetInvocationList();
foreach (EventHandler<T> item in list)
{
if(((ICanDoThing)item.Target).CanDoThing)
{
item(this, someArgs);
}
}
Ora, si può vedere che ho gettato item.Target ad un tipo di ICanDoThing, che è un'interfaccia che ho appena fatto up che espone un metodo "CanDoThing". Questo ti permette di interrogare l'oggetto per sapere se supporta la tua particolare esigenza.
Probabilmente dovresti chiederci se dovresti comunque utilizzare un evento per questo, ma quanto sopra ti consentirà di farlo.
Penso che siano necessari più eventi qui, in modo che gli abbonati possano iscriversi agli eventi che desiderano davvero.
Sottoscrivere un evento significa che sei interessato a un evento. Se non sei interessato a un evento, non devi iscriverti a .
È possibile utilizzare il modello di osservatore, descritto qui: http://www.dofactory.com/Patterns/PatternObserver.aspx e implementare la logica nel metodo di aggiornamento dell'osservatore.
- 1. invocazione di un campo simile polimorfico evento
- 2. clang ++ C++ 11 invocazione
- 3. Invocazione di un URL - C#
- 4. Invocazione del debugger da un programma C
- 5. Java 8 flusso valore di filtraggio di lista in una lista
- 6. Excel dati Lista convalida usando la formula con il filtraggio
- 7. Django - filtraggio su oggetti correlati
- 8. Iscriviti evento a evento in C#?
- 9. Invocazione Java metodi generici
- 10. invocazione illegale con document.querySelector
- 11. jQuery - invocazione illegale
- 12. Dispatcher.CurrentDispatcher.BeginInvoke Non invocazione
- 13. ajax formdata: invocazione illegale
- 14. C# Aggiornare una lista da un'altra lista
- 15. Filtraggio collaborativo in MySQL?
- 16. WPF C IsVisibleChanged evento
- 17. Filtraggio sull'unione?
- 18. Ordine di valutazione in catena di invocazione in C++
- 19. Rilevamento di funzioni durante P/Invocazione in C# e .NET
- 20. Invocazione di script PowerShell con argomenti da C#
- 21. C# LINQ selezionare dalla lista
- 22. C# Lista multithread operazioni
- 23. Invocazione concatenata in Java 7?
- 24. TypeError: Invocazione illegale sul console.log.apply
- 25. disable-spumeggiante evento C# wpf
- 26. Sintassi di rimozione evento C#
- 27. Nome evento di proprietà C#
- 28. Invocazione ambigua su Generic Continue con il
- 29. C# Differenza di Winform tra evento DoubleClick e evento MouseDoubleClick
- 30. filtraggio ELMAH non funziona
Ti dispiacerebbe elaborare come dovrebbe funzionare il filtro? Dipende da un "tipo di messaggio" impostato in anticipo o qualcosa che fa il primo sottoscrittore che invalida che l'evento debba essere attivato dagli altri ascoltatori (una specie di "Mi sono già preso cura di questo, il resto di voi don" devo fare qualcosa ")? – Patrick
Sì, dipende dal tipo di messaggio. Ci sarà un ID e sulla base di questo ho bisogno di invocare solo quegli abbonati interessati con thar Id –
Questa lista di ID è predeterminata? In altre parole, puoi aggiungere un evento per ciascuno degli id, o è dinamico nel senso che l'elenco può cambiare durante la vita dell'applicazione? – Patrick