');

C# LanguageVeranstaltungen

Einführung

Ein Ereignis ist eine Benachrichtigung, dass ein Ereignis aufgetreten ist (z. B. ein Mausklick) oder in einigen Fällen unmittelbar bevorsteht (z. B. Preisänderung).

Klassen können Ereignisse definieren und ihre Instanzen (Objekte) können diese Ereignisse auslösen. Eine Schaltfläche kann beispielsweise ein Click-Ereignis enthalten, das ausgelöst wird, wenn ein Benutzer darauf geklickt hat.

Event-Handler sind dann Methoden, die aufgerufen werden, wenn das entsprechende Ereignis ausgelöst wird. Ein Formular kann beispielsweise einen Clicked-Ereignishandler für jede Schaltfläche enthalten, die es enthält.

Parameter

Parameter Einzelheiten
EventArgsT Der von EventArgs abgeleitete Typ, der die Ereignisparameter enthält.
Veranstaltungsname Der Name der Veranstaltung
HandlerName Der Name des Event-Handlers.
SenderObject Das Objekt, das das Ereignis aufruft.
EventArguments Eine Instanz des EventArgsT-Typs, die die Ereignisparameter enthält.

Bemerkungen

Wenn Sie eine Veranstaltung auslösen:

  • Überprüfen Sie immer, ob der Delegat null . Ein null-Delegat bedeutet, dass das Ereignis keine Abonnenten hat. Das Auslösen eines Ereignisses ohne Abonnenten führt zu einer NullReferenceException .
6,0
  • Kopieren Sie den Delegaten (z. B. EventName ) in eine lokale Variable (z. B. eventName ), bevor Sie auf null überprüfen / das Ereignis eventName . Dadurch werden Race-Bedingungen in Umgebungen mit mehreren Threads vermieden:

Falsch :

    if(Changed != null)      // Changed has 1 subscriber at this point
                             // In another thread, that one subscriber decided to unsubscribe
        Changed(this, args); // `Changed` is now null, `NullReferenceException` is thrown.

Richtig :

    // Cache the "Changed" event as a local. If it is not null, then use
    // the LOCAL variable (handler) to raise the event, NOT the event itself.
    var handler = Changed;
    if(handler != null)
        handler(this, args);
6,0
  • Verwenden Sie den nullbedingten Operator (?.), EventName?.Invoke(SenderObject, new EventArgsT()); anstatt den Delegaten in einer if EventName?.Invoke(SenderObject, new EventArgsT()); null zu überprüfen: EventName?.Invoke(SenderObject, new EventArgsT());
  • Bei der Verwendung von Aktion <> zum Deklarieren von Delegattypen muss die anonyme Methoden- / Ereignishandler-Signatur mit dem deklarierten anonymen Delegattyp in der Ereignisdeklaration übereinstimmen.

Veranstaltungen Verwandte Beispiele