Der erste definiert einen Delegaten, der zweite definiert ein Ereignis. Die beiden sind verwandt, aber sie werden typischerweise sehr unterschiedlich verwendet. Wenn Sie EventHandler
oder EventHandler<T>
verwenden, würde dies im Allgemeinen bedeuten, dass Sie ein Ereignis verwenden. Der Aufrufer (für die Verarbeitung des Fortschritts) würde normalerweise für das Ereignis abonnieren (nicht in einem Delegaten übergeben), und Sie würden das Ereignis auslösen, wenn Sie Abonnenten haben.
Wenn Sie einen funktionelleren Ansatz verwenden und einen Delegaten übergeben möchten, würde ich einen geeigneteren Delegaten für die Verwendung auswählen. In diesem Fall liefern Sie keine Informationen wirklich in der EventArgs
, also wäre vielleicht nur System.Action
geeigneter.
Dies gesagt, ein Ereignis Ansatz erscheint hier angemessener, aus dem kleinen Code gezeigt. Einzelheiten zur Verwendung von Ereignissen finden Sie im C# -Programmierhandbuch unter Events.
Ihr Code, Ereignisse verwenden, wäre so etwas wie wahrscheinlich aussehen:
// 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...
Wenn Sie Ihren Fortschritt nennen, würden Sie schreiben:
var handler = this.ProgressChanged;
if (handler != null)
handler(this, EventArgs.Empty);
Der Nutzer der dies als schreiben würde:
yourClass.ProgressChanged += myHandler;
yourClass.Download(url);
haben ich glaube, ich weiß nicht wirklich reale Ereignisse brauchen, weil ich nur 1 Teilnehmer habe und ich brauche um die Delegierten zu übergeben. Danke für die Antwort. –