Raise-Event

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Rinecamo.

    Hallo Leute,
    da mein letzter Thread untergegangen ist frag ich nochmal,
    wie muss das RaiseEvent-Definition für diesen Code aussehen?

    VB.NET-Quellcode

    1. Public Custom Event DownloadCompleted As EventHandler
    2. AddHandler(ByVal value As EventHandler)
    3. Dim handler2 As EventHandler
    4. Dim downloadCompleted As EventHandler = Me.DownloadCompleted
    5. Do
    6. handler2 = downloadCompleted
    7. Dim handler3 As EventHandler = DirectCast([Delegate].Combine(handler2, value), EventHandler)
    8. downloadCompleted = Threading.Interlocked.CompareExchange(Of EventHandler)((Me.DownloadCompleted), handler3, handler2)
    9. Loop While (Not downloadCompleted Is handler2)
    10. End AddHandler
    11. RemoveHandler(ByVal value As EventHandler)
    12. Dim handler2 As EventHandler
    13. Dim downloadCompleted As EventHandler = Me.DownloadCompleted
    14. Do
    15. handler2 = downloadCompleted
    16. Dim handler3 As EventHandler = DirectCast([Delegate].Remove(handler2, value), EventHandler)
    17. downloadCompleted = Threading.Interlocked.CompareExchange(Of EventHandler)((Me.DownloadCompleted), handler3, handler2)
    18. Loop While (Not downloadCompleted Is handler2)
    19. End RemoveHandler
    20. End Event


    Ich hab schon bei google gesucht und auch bei msdn hab auch was gefunden, allerdings ncihts was hilfreich war.
    Hoffe jemand kann mir helfen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rinecamo“ ()

    Samus Aran schrieb:

    Der Fehler liegt also in deinem Event.

    Tu's ja auch, nur hab ich die Vermutung Rinecamo weiss überhaupt nicht was er tut, bzw. was der Code bezwecken soll. In dieser Form ist er jedenfalls unsinnig.

    Aber gut, hier ist Deine (D)eine mögliche Definition:

    VB.NET-Quellcode

    1. RaiseEvent()
    2. ' tu was
    3. End RaiseEvent


    Hilft Dir das weiter ?

    Rinecamo schrieb:

    Nein hat mir nicht weitergeholfen.

    Das hätte mich auch sehr gewundert ;)

    Was ich damit meinte war:
    - im AddHandler , RemoveHandler Block eines Custom Events müssen die Argumente irgendeine Art Delegat sein
    - im RaiseEvent Block kann die Signatur beliebig sein, da es die Argumente darstellt die Du Deinem Event mitgibst

    Aber da Du das Custom Event as EventHandler deklariert hast, sollte hier wirklich kein Argument stehen, da Eventhandler eine Methode ohne Argumente definiert.
    Ok, das muss ich mir nochmal genauer angucken, habs jetzt so gemacht:

    VB.NET-Quellcode

    1. Public Sub add_DownloadCompleted(ByVal value As EventHandler)
    2. Dim handler2 As EventHandler
    3. Dim downloadCompleted As EventHandler = Me.DownloadCompleted
    4. Do
    5. handler2 = downloadCompleted
    6. Dim handler3 As EventHandler = DirectCast([Delegate].Combine(handler2, value), EventHandler)
    7. downloadCompleted = Threading.Interlocked.CompareExchange(Of EventHandler)((Me.DownloadCompleted), handler3, handler2)
    8. Loop While (Not downloadCompleted Is handler2)
    9. End Sub
    10. Public Sub remove_DownloadCompleted(ByVal value As EventHandler)
    11. Dim handler2 As EventHandler
    12. Dim downloadCompleted As EventHandler = Me.DownloadCompleted
    13. Do
    14. handler2 = downloadCompleted
    15. Dim handler3 As EventHandler = DirectCast([Delegate].Remove(handler2, value), EventHandler)
    16. downloadCompleted = Threading.Interlocked.CompareExchange(Of EventHandler)((Me.DownloadCompleted), handler3, handler2)
    17. Loop While (Not downloadCompleted Is handler2)
    18. End Sub