Il primo definisce un delegato, il secondo definisce un evento. I due sono correlati, ma sono tipicamente usati in modo molto diverso.
In generale, se si utilizza EventHandler
o EventHandler<T>
, ciò suggerisce che si sta utilizzando un evento. Il chiamante (per la gestione dell'avanzamento) tipicamente abbona all'evento (non passa in un delegato) e si aumenterà l'evento se si dispone di sottoscrittori.
Se si desidera utilizzare un approccio più funzionale e passare un delegato, sceglierei un delegato più appropriato da utilizzare. In questo caso, non stai fornendo alcuna informazione nello EventArgs
, quindi forse l'utilizzo di System.Action
sarebbe più appropriato.
Detto questo, un approccio di evento sembra più appropriato qui, dal piccolo codice mostrato. Per i dettagli sull'utilizzo degli eventi, vedere Events nella Guida alla programmazione C#.
Il codice, utilizzando gli eventi, sarebbe probabilmente simile a:
// This might make more sense as a delegate with progress information - ie: percent done?
public event EventHandler ProgressChanged;
public void Download(string url)
{
// ... No delegate here...
Quando si chiama il vostro progresso, devi scrivere:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
L'utente di questo sarebbe scrivere questo come:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
fonte
2013-02-27 18:21:46
Credo che non si ha realmente bisogno di eventi reali, perché avrò solo 1 abbonato e ho bisogno di passare i delegati intorno. Grazie per la risposta. –