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)
Hier wäre die Sub "Steuerung", die die Daten auswertet und entsprechend zur Frm weitergibt.
Ich verstehe nicht genau, was genau der Fehler auslöst. Vor ein paar Tagen hats noch funktioniert. Könnte es an:
liegen? Habe seit dieser Zeile das Problem
mfg
gfc
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:
Dies ist Mein Code, um die Daten vom TelnetServer zu empfangen (Funktioniert)
VB.NET-Quellcode
- Public Sub Listen()
- 'Definiert div. Integers und Bytes
- Dim i As Integer = 0
- Dim NumBytes As Integer = 0
- Dim RecvBytes(255) As [Byte]
- 'Eine Schleife, die erst abbricht, wenn die Verbindung verloren wurde
- Do While tnSocket.Connected = True
- Do
- 'Eine Empfangs-Schleife, die bis 256Bytes läuft und dann weiter geht
- 'Gibt die Anzahl empfangener Bytes an NumBytes weiter
- NumBytes = tnSocket.Receive(RecvBytes, RecvBytes.Length, 0)
- 'Empfängt und decodet (zu ASCII) die empfangene Bytes und gibt diese an RecvString...
- RecvString = RecvString + Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
- '... und Command_string weiter
- Command_string = Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
- Loop While NumBytes = 256
- 'Auto-Login Überprüfung, um keine Anmelde-Daten angeben zu müssen.
- If i = 0 Then
- 'Wenn der Username verlangt wird, wird dieser gesendet (string loginname)
- If Command_string.Trim.ToLower.Contains("username:") Then
- Senden(loginname)
- i = 1
- GoTo a
- End If
- ElseIf i = 1 Then
- 'Wenn das Passwort verlangt wird, wird dieser gesendet (string loginpw)
- If Command_string.Trim.ToLower.Contains("password:") Then
- Senden(loginpw)
- i = 2
- GoTo a
- End If
- ElseIf i = 2 Then
- 'Wenn das Passwort oder der Name falsch ist, geht er zur Username-Überprüfung zurück
- If Command_string.Trim.ToLower.Contains("username and/or password incorrect") Then
- Me.Invoke(New DAddItem(AddressOf Labelset), "Verbindung fehlgeschlagen!")
- MsgBox("Username and/or password incorrect!" & vbCrLf & "Closing Connection", MsgBoxStyle.Critical, "Verbinden fehlgeschlagen!")
- GoTo B
- i = 3
- 'Wenn die Anmeldung erfolgreich ist, wird die Variable i auf 3 gesetzt (Auto-Login überspringen)
- ElseIf Command_string.Trim.ToLower.Contains("welcome") Then
- Me.Invoke(New DAddItem(AddressOf Labelset), "Verbunden mit " & ip & ":" & port)
- i = 3
- End If
- 'Wenn aber "Bye" empfangen wird, wird die Application geschlossen (Verbindung beendet)
- ElseIf Command_string.Trim.ToLower.Contains("bye!") Then
- Application.Exit()
- End If
- 'Sendet die Empfangene Daten an AddItem und Steuerung weiter.
- Me.Invoke(New DAddItem(AddressOf AddItem), RecvString)
- Me.Invoke(New DAddItem(AddressOf Steuerung), Command_string) 'Aber hier kommt der Error :S
- Me.Invoke(New DAddItem(AddressOf RevLOG), Command_string)
- A:
- Wait(1000)
- Command_string = Nothing
- Loop
- B: Call disconnect()
- End Sub
Hier wäre die Sub "Steuerung", die die Daten auswertet und entsprechend zur Frm weitergibt.
VB.NET-Quellcode
- Public Sub Steuerung(ByVal Textx As String)
- 'Filtert unnötige Farbbefehle heraus, um die LED-Überprüfung zu erleichtern.
- 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"})
- Dim a As String
- For Each a In colorcommands
- If Textx.Contains(a) Then
- Textx = Text.Replace(a, "")
- End If
- Next
- Dim z As String() = Textx.Split(Convert.ToChar("#"))
- Text = z(1)
- If Not Text.StartsWith("1=") Then Exit Sub
- Dim x As String() = Text.Split("=")
- Dim categorie As String = x(1)
- Dim part As String = x(2)
- Dim job As String = x(3)
- Select Case categorie
- Case "1"
- If job = "1" Then
- AddP(Ctrl_7SegLED2, Ctrl_7SegLED1)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "2"
- If job = "1" Then
- RemoveP(Ctrl_7SegLED2, Ctrl_7SegLED1)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "3"
- If job = "1" Then
- Timeout(1)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "4"
- If job = "1" Then
- AddP(Ctrl_7SegLED5, Ctrl_7SegLED4)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "5"
- If job = "1" Then
- RemoveP(Ctrl_7SegLED5, Ctrl_7SegLED4)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "6"
- If job = "1" Then
- Timeout(2)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "7"
- If job = "1" Then
- Ctrl_7SegLED13.Digit = 2
- Ctrl_7SegLED12.Digit = 0
- Ctrl_7SegLED14.Digit = 0
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "8"
- If job = "1" Then
- Ctrl_7SegLED13.Digit = 5
- Ctrl_7SegLED12.Digit = 0
- Ctrl_7SegLED14.Digit = 0
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "9"
- If job = "1" Then
- Strafe1 = 600
- PictureBox12.Image = My.Resources.Ampel_Rot
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "a"
- If job = "1" Then
- Ctrl_7SegLED15.Digit = 2
- Ctrl_7SegLED16.Digit = 0
- Ctrl_7SegLED17.Digit = 0
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "b"
- If job = "1" Then
- Ctrl_7SegLED15.Digit = 5
- Ctrl_7SegLED16.Digit = 0
- Ctrl_7SegLED17.Digit = 0
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "c"
- If job = "1" Then
- strafe2 = 600
- PictureBox10.Image = My.Resources.Ampel_Rot
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "d"
- If job = "1" Then
- Periode(1)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "e"
- If job = "1" Then
- Periode(0)
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "f"
- If job = "1" Then
- Timer1.Start()
- ElseIf job = "ERROR" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "g"
- If job = "1" Then
- Timer1.Stop()
- ElseIf job = "ERROR" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- Case "h"
- If job = "1" Then
- Dim y As String() = part.Split(Convert.ToChar(":"))
- Debug.Print(x(0).ToString & " " & x(1).ToString)
- Dim s As String = y(0)
- Dim t As String = y(1)
- Ctrl_7SegLED9.Digit = s(0).ToString()
- Ctrl_7SegLED10.Digit = s(1).ToString()
- Ctrl_7SegLED11.Digit = t(0).ToString()
- Ctrl_7SegLED8.Digit = t(1).ToString()
- ElseIf job = "2" Then
- MsgBox("ERROR beim Ausführen des Befehls: " & Text, MsgBoxStyle.Critical, "ERROR")
- End If
- End Select
- Text = Nothing
- End Sub
Ich verstehe nicht genau, was genau der Fehler auslöst. Vor ein paar Tagen hats noch funktioniert. Könnte es an:
liegen? Habe seit dieser Zeile das Problem
mfg
gfc