Eigenen EventHandler bauen

    • VB.NET
    • .NET (FX) 4.0

      Eigenen EventHandler bauen

      Hallo Community

      Vielleicht hat sich der eine oder andere schon gefragt, wie baut man sich denn einen eigenen Eventhandler. Nun die Frage habe ich mir nach dem Beispiel GlobalEvent auch getellt. Siehe hier.

      Für mich war es eine gute Gelgenheit und Übung, mich mit dem Thema Events näher zu beschäftigen.

      Der Eventhandler kann in jede beliebigen Klasse Implementiert werden. Aufgerufen werden kann es mit einem Einzeiler. Die Events werden aktiviert, und gleichzeitig nach erfolgter Tätigkeit wieder deaktiviert.

      VB.NET-Quellcode

      1. Me.OnEventSetReset(Me, GetDataIEvent)


      Das lässt sich auch mit einer Array machen. Es gelten die gleichen Bedingungen wie oben.

      VB.NET-Quellcode

      1. Dim tc1 As New TestClass1
      2. Dim tc2 As New TestClass2
      3. 'Alle Instanzen + Daten (GetDataIEvent für IEvents)
      4. 'in das EventPack zusammensammeln und in die Methode
      5. 'OnEventSetReset einfliessen lassen.
      6. Dim ep = New EventPack() {New EventPack(Me, GetDataIEvent), _
      7. New EventPack(tc1, GetDataIEvent), _
      8. New EventPack(tc2, GetDataIEvent)}
      9. Me.OnEventSetReset(ep)


      Für die ChainEvent nimmt man sich einfach die entsprechenden Instanzen der gewünschten Klassen, in dem das Event springen soll, wobei die Daten für den IEvent zuerst eingepackt werden müssen. Auch hier muss man sich um die Aktivierung, wie auch Deaktivierung der Events nicht kümmern.

      VB.NET-Quellcode

      1. Dim tc1 As New TestClass1
      2. Dim tc2 As New TestClass2
      3. 'Beim ChainTest wird immer das gleiche Datenpacket (GetDataIEvent)
      4. 'für die IEvent verwendet. Einfach die Instanzen sammeln und in die
      5. 'Methode OnEventChain einfliessen lassen.
      6. Dim _sender = New IEventFired() {Me, tc1, tc2}
      7. Dim epc = New EventPackChain(_sender, GetDataIEvent())
      8. Me.OnEventChain(epc)


      Und hier noch der Rumpf und die Parameter-Signatur in die gesprungen wird. Wie man erkennt wird diese implementiert.

      VB.NET-Quellcode

      1. Private Sub EventFired(ByVal sender As ISender, ByVal e As IEvent) Implements IEventFired.EventFired
      2. 'Code
      3. End Sub


      Es ist sicher nicht ausgereift, und will man den eigenen Eventhandler Flächendecken einsetzen (macht eigenlich keinen Sinn, da schon Eventhandler als Bordmittel in .Net vorhanden sind), so wäre mehr arbeit von nöten. Schlussendlich soll es ja nur zeigen, dass so etwas auch möglich ist, auch wenn es keinen Einsatzbedarf hat.

      Trotzdem werden sich wahrscheinlich einige fragen wo man so was brauchen kann? Die Antwort ist sehr einfach.
      Überall dort, wo eine veränderte Parameter-Signatur als Vorteil gewertet wird, und sei es auch nur ein kleiner Vorteil. So nebenbei erwähnt lässt sich 'WorkEvent' wie jede andere Klasse problemlos kopieren bzw. serialisieren.
      Ohne jetzt auf konkrete Beispiele einzugehen, eine andere Antwort gibt es nicht.


      Zum Anhang:
      Projekt: EventHandlerEx ist der selber gebaute Eventhandler
      Projekt: EventInClasses ist das gleiche Konzept Ohne Erbung dafür mit EventHandler(Of EventArgs)


      Freundliche Grüsse

      exc-jdbi
      Dateien

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „exc-jdbi“ ()