IndexOutOfRangeException - Problem bei Me.Invoke

  • VB.NET

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

    IndexOutOfRangeException - Problem bei Me.Invoke

    Hi,

    ich versuche empfangene Daten an eine andere Sub weiterzuleiten, die auf die MainFrm zugreift.
    In dieser "Anderen Sub" werden nacher die Empfangene Daten aufgeteilt, um auf der MainFrm etwas anzuzeigen.
    Der Error: IndexOutOfRangeException wurde nicht behandelt. - Der Index war ausserhalb des Arraybereichs. Bei "Me.Invoke(New DAddItem(AddressOf Steuerung), Command_string)"
    Nur geht es plötzlich nicht meht, was ich nicht so verstehe.
    Hier mal mein Code:
    Spoiler anzeigen

    Dies ist Mein Code, um die Daten vom TelnetServer zu empfangen (Funktioniert)

    VB.NET-Quellcode

    1. Public Sub Listen()
    2. 'Definiert div. Integers und Bytes
    3. Dim i As Integer = 0
    4. Dim NumBytes As Integer = 0
    5. Dim RecvBytes(255) As [Byte]
    6. 'Eine Schleife, die erst abbricht, wenn die Verbindung verloren wurde
    7. Do While tnSocket.Connected = True
    8. Do
    9. 'Eine Empfangs-Schleife, die bis 256Bytes läuft und dann weiter geht
    10. 'Gibt die Anzahl empfangener Bytes an NumBytes weiter
    11. NumBytes = tnSocket.Receive(RecvBytes, RecvBytes.Length, 0)
    12. 'Empfängt und decodet (zu ASCII) die empfangene Bytes und gibt diese an RecvString...
    13. RecvString = RecvString + Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
    14. '... und Command_string weiter
    15. Command_string = Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
    16. Loop While NumBytes = 256
    17. 'Auto-Login Überprüfung, um keine Anmelde-Daten angeben zu müssen.
    18. If i = 0 Then
    19. 'Wenn der Username verlangt wird, wird dieser gesendet (string loginname)
    20. If Command_string.Trim.ToLower.Contains("username:") Then
    21. Senden(loginname)
    22. i = 1
    23. GoTo a
    24. End If
    25. ElseIf i = 1 Then
    26. 'Wenn das Passwort verlangt wird, wird dieser gesendet (string loginpw)
    27. If Command_string.Trim.ToLower.Contains("password:") Then
    28. Senden(loginpw)
    29. i = 2
    30. GoTo a
    31. End If
    32. ElseIf i = 2 Then
    33. 'Wenn das Passwort oder der Name falsch ist, geht er zur Username-Überprüfung zurück
    34. If Command_string.Trim.ToLower.Contains("username and/or password incorrect") Then
    35. Me.Invoke(New DAddItem(AddressOf Labelset), "Verbindung fehlgeschlagen!")
    36. MsgBox("Username and/or password incorrect!" & vbCrLf & "Closing Connection", MsgBoxStyle.Critical, "Verbinden fehlgeschlagen!")
    37. GoTo B
    38. i = 3
    39. 'Wenn die Anmeldung erfolgreich ist, wird die Variable i auf 3 gesetzt (Auto-Login überspringen)
    40. ElseIf Command_string.Trim.ToLower.Contains("welcome") Then
    41. Me.Invoke(New DAddItem(AddressOf Labelset), "Verbunden mit " & ip & ":" & port)
    42. i = 3
    43. End If
    44. 'Wenn aber "Bye" empfangen wird, wird die Application geschlossen (Verbindung beendet)
    45. ElseIf Command_string.Trim.ToLower.Contains("bye!") Then
    46. Application.Exit()
    47. End If
    48. 'Sendet die Empfangene Daten an AddItem und Steuerung weiter.
    49. Me.Invoke(New DAddItem(AddressOf AddItem), RecvString)
    50. Me.Invoke(New DAddItem(AddressOf Steuerung), Command_string) 'Aber hier kommt der Error :S
    51. Me.Invoke(New DAddItem(AddressOf RevLOG), Command_string)
    52. A:
    53. Wait(1000)
    54. Command_string = Nothing
    55. Loop
    56. B: Call disconnect()
    57. End Sub

    Hier wäre die Sub "Steuerung", die die Daten auswertet und entsprechend zur Frm weitergibt.

    VB.NET-Quellcode

    1. Public Sub Steuerung(ByVal Textx As String)
    2. 'Filtert unnötige Farbbefehle heraus, um die LED-Überprüfung zu erleichtern.
    3. Static colorcommands As New List(Of String)(New String() {"[00;37m", "[01;33m", "????????", "[00;37;40m[2J[01;37m", "[00;37m[01;33m", "[01;31m"})
    4. Dim a As String
    5. For Each a In colorcommands
    6. If Textx.Contains(a) Then
    7. Textx = Text.Replace(a, "")
    8. End If
    9. Next
    10. Dim z As String() = Textx.Split(Convert.ToChar("#"))
    11. Text = z(1)
    12. If Not Text.StartsWith("1=") Then Exit Sub
    13. Dim x As String() = Text.Split("=")
    14. Dim categorie As String = x(1)
    15. Dim part As String = x(2)
    16. Dim job As String = x(3)
    17. Select Case categorie
    18. Case "1"
    19. If job = "1" Then
    20. AddP(Ctrl_7SegLED2, Ctrl_7SegLED1)
    21. ElseIf job = "2" Then
    22. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    23. End If
    24. Case "2"
    25. If job = "1" Then
    26. RemoveP(Ctrl_7SegLED2, Ctrl_7SegLED1)
    27. ElseIf job = "2" Then
    28. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    29. End If
    30. Case "3"
    31. If job = "1" Then
    32. Timeout(1)
    33. ElseIf job = "2" Then
    34. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    35. End If
    36. Case "4"
    37. If job = "1" Then
    38. AddP(Ctrl_7SegLED5, Ctrl_7SegLED4)
    39. ElseIf job = "2" Then
    40. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    41. End If
    42. Case "5"
    43. If job = "1" Then
    44. RemoveP(Ctrl_7SegLED5, Ctrl_7SegLED4)
    45. ElseIf job = "2" Then
    46. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    47. End If
    48. Case "6"
    49. If job = "1" Then
    50. Timeout(2)
    51. ElseIf job = "2" Then
    52. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    53. End If
    54. Case "7"
    55. If job = "1" Then
    56. Ctrl_7SegLED13.Digit = 2
    57. Ctrl_7SegLED12.Digit = 0
    58. Ctrl_7SegLED14.Digit = 0
    59. ElseIf job = "2" Then
    60. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    61. End If
    62. Case "8"
    63. If job = "1" Then
    64. Ctrl_7SegLED13.Digit = 5
    65. Ctrl_7SegLED12.Digit = 0
    66. Ctrl_7SegLED14.Digit = 0
    67. ElseIf job = "2" Then
    68. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    69. End If
    70. Case "9"
    71. If job = "1" Then
    72. Strafe1 = 600
    73. PictureBox12.Image = My.Resources.Ampel_Rot
    74. ElseIf job = "2" Then
    75. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    76. End If
    77. Case "a"
    78. If job = "1" Then
    79. Ctrl_7SegLED15.Digit = 2
    80. Ctrl_7SegLED16.Digit = 0
    81. Ctrl_7SegLED17.Digit = 0
    82. ElseIf job = "2" Then
    83. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    84. End If
    85. Case "b"
    86. If job = "1" Then
    87. Ctrl_7SegLED15.Digit = 5
    88. Ctrl_7SegLED16.Digit = 0
    89. Ctrl_7SegLED17.Digit = 0
    90. ElseIf job = "2" Then
    91. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    92. End If
    93. Case "c"
    94. If job = "1" Then
    95. strafe2 = 600
    96. PictureBox10.Image = My.Resources.Ampel_Rot
    97. ElseIf job = "2" Then
    98. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    99. End If
    100. Case "d"
    101. If job = "1" Then
    102. Periode(1)
    103. ElseIf job = "2" Then
    104. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    105. End If
    106. Case "e"
    107. If job = "1" Then
    108. Periode(0)
    109. ElseIf job = "2" Then
    110. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    111. End If
    112. Case "f"
    113. If job = "1" Then
    114. Timer1.Start()
    115. ElseIf job = "ERROR" Then
    116. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    117. End If
    118. Case "g"
    119. If job = "1" Then
    120. Timer1.Stop()
    121. ElseIf job = "ERROR" Then
    122. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    123. End If
    124. Case "h"
    125. If job = "1" Then
    126. Dim y As String() = part.Split(Convert.ToChar(":"))
    127. Debug.Print(x(0).ToString & " " & x(1).ToString)
    128. Dim s As String = y(0)
    129. Dim t As String = y(1)
    130. Ctrl_7SegLED9.Digit = s(0).ToString()
    131. Ctrl_7SegLED10.Digit = s(1).ToString()
    132. Ctrl_7SegLED11.Digit = t(0).ToString()
    133. Ctrl_7SegLED8.Digit = t(1).ToString()
    134. ElseIf job = "2" Then
    135. MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
    136. End If
    137. End Select
    138. Text = Nothing
    139. End Sub



    Ich verstehe nicht genau, was genau der Fehler auslöst. Vor ein paar Tagen hats noch funktioniert. Könnte es an:

    VB.NET-Quellcode

    1. Dim z As String() = Textx.Split(Convert.ToChar("#"))
    2. Text = z(1)

    liegen? Habe seit dieser Zeile das Problem :S

    mfg

    gfc
    Jo.

    Einfach mal die Fehlermeldung selber lesen, statt auf VBP zu posten: Wenn der Index out of Range ist, erhälst du eine IndexOutOfRangeException - potzblitz!

    Exceptions, und was sie uns sagen wollen

    Aber Frage ist natürlich, ob das ühaupt die Fehlerzeile ist.

    Also Fehlerzeile? (5 Regeln für sinnvolle Fragen)

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

    Oder einfach so:

    VB.NET-Quellcode

    1. Dim z As String() = Textx.Split(Convert.ToChar("#"))
    2. If z.Length > 0 Then
    3. Text = z(1)
    4. Else
    5. Text = "Nix da"
    6. End If
    Wenn Du auf Index 7 oder so zugreifst, kann es natürlich wieder knallen. :S
    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!

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. If z.Length > 0 Then
    2. Text = z(1)
    3. Else Text = "Nix da"
    4. End If


    Wenn dann if z.Length > 1

    Weil sonst bekommt bei z.B.:

    VB.NET-Quellcode

    1. dim z() as string = {"Test"}
    2. If z.Length > 0 Then
    3. Text = z(1)
    4. Else
    5. Text = "Nix da"
    6. End If


    Trotzdem den Fehler. Index 1 = Length 2.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    BiedermannS schrieb:

    Trotzdem den Fehler.
    Glückwunsch. :thumbsup:

    RodFromGermany schrieb:

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    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!
    Danke für die Hilfen, es hat teils funktioniert, habs aber komplett zum laufen gebracht =)

    Vielleicht poste ich das Endprogramm im Showroom...

    mfg

    gfc