Event wird erst beim zweiten Mal ausgeführt

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Event wird erst beim zweiten Mal ausgeführt

    Guten Tag, isch hätte da mal eine Frage.

    Ich habe eine Klasse -> xUser (Enthält Eigenschaften und Methoden für einen Benutzer)

    In dieser Klasse habe ich ein Event -> Public Event LoggedIn(ByVal state As LoginState)


    Wenn eine neue Instanz von "xUser" erstellt wird mit

    VB.NET-Quellcode

    1. New xUser(MessageType.LOGIN, name, passwort)



    werden diese Daten an einen TCP-Server gesendet, ausgewertet und sofort eine Antwort zurück gesendet.
    Dann wird das Event mit dem entsprechendem LoginState aufgerufen.

    Das Problem ist, dass es einfach nicht funktioniert.

    Erstelle ich danach allerdings direkt noch eine Instanz, funktioniert es. Nur verstehe ich nicht warum.
    Das Event wird ganz normal über "RaiseEvent" aufgerufen.

    Gruß,
    eXpire
    Kann es sein, dass 2 Zeilen über dem Statement RaiseEvent steht:

    VB.NET-Quellcode

    1. If FirstCall Then
    2. FirstCall =False
    3. Return
    4. End If
    :?:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nein, so etwas steht da nicht.

    Die Antwort, die vom Server kommt, ist entweder TRUE oder FALSE

    Also, das Event wird in beiden Fällen aufgerufen, nur mit einem anderen LoginState.

    Im Einzelschritt geht der Debugger auch auf RaiseEvent. In der Form, wo dieses genutzt wird, wird es beim ersten Mal allerdings nicht erreicht.

    eXpire schrieb:

    Nein, so etwas steht da nicht.

    Leider ist mir eben meine Glaskugel runtergefallen.
    Ja was steht denn da?
    Poste doch einfach mal Deinen Code.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hier ist einmal ein Ausschnitt der Klasse xUser:

    Spoiler anzeigen

    Public Sub New()

    VB.NET-Quellcode

    1. If SendLogin(tmpMessage) Then
    2. m_LoginState = LoginStateEnum.LoggedIn
    3. t.Start()
    4. RaiseEvent LoggedIn(LoginStateEnum.LoggedIn)
    5. Else
    6. m_LoginState = LoginStateEnum.LoggedOut
    7. RaiseEvent LoggedIn(LoginStateEnum.LoggedOut)
    8. End If


    Funktion SendLogin()

    VB.NET-Quellcode

    1. Dim tmpMessage As New xMessage
    2. With tmpMessage
    3. .MType = xMessage.MessageType.LOGIN
    4. .Sender = tmpString(1)
    5. .Recipicant = tmpString(2)
    6. .Message = tmpString(3)
    7. End With
    8. If tmpMessage.Message = "true" Then
    9. Return True
    10. Else
    11. Return False
    12. End If



    Reicht das schon so, um das Problem zu verstehen?
    bitte vollständige Methoden posten (wenn nicht > 20 Zeilen)

    ich sehe nirgends, dass jemand das Event empfängt.

    Aber in Sub New ein Event zu feuern hat eh niemals einen Sinn.
    Weil in Sub New ist das Objekt noch gar nicht da, und daher kann es logisch niemanden geben, der seine Ereignisse empfängt.