Pierwsza definiuje delegata, druga definiuje zdarzenie. Te dwa są ze sobą powiązane, ale zazwyczaj są używane bardzo odmiennie.
Ogólnie, jeśli używasz EventHandler
lub EventHandler<T>
, sugeruje to, że używasz wydarzenia. Osoba dzwoniąca (do obsługi postępów) zwykle subskrybuje subskrybując na wydarzenie (nie przekazuje delegata), a Ty podniosłeś wydarzenie, jeśli masz subskrybentów.
Jeśli chcesz zastosować bardziej funkcjonalne podejście i przekazać delegata, wybrałbym bardziej odpowiedniego pełnomocnika do użycia W tym przypadku tak naprawdę nie podajesz żadnych informacji w EventArgs
, więc może lepiej byłoby użyć tylko numeru System.Action
.
Zgodnie z powyższym podejście do zdarzenia wydaje się bardziej odpowiednie w tym miejscu, od przedstawionego kodu. Aby uzyskać szczegółowe informacje na temat korzystania z wydarzeń, zobacz Events w Przewodniku programowania C#.
Twój kod, za pomocą zdarzenia, prawdopodobnie wyglądać następująco:
// 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...
Po wywołaniu swoje postępy, można napisać:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
Użytkownik byłoby napisać to jako:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
Chyba naprawdę nie potrzebują prawdziwych wydarzeń, bo mam tylko 1 abonenta i muszę przekazać delegatom dookoła. Dzięki za odpowiedzi. –