Telnet Client hängt sich auf

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von gfcwfzkm.

    Telnet Client hängt sich auf

    Hi,

    ich habe ein Problem mit meinem TelnetClient, den ich gerade schreibe, und zwar hängt er sich beim empfangen von nachrichten immer auf.
    Hier wäre die meldung:
    Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement RichTextBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
    Fehler kommt in ZEILE 50
    Mein Code:

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.Net.Sockets
    3. Imports System.Text
    4. Public Class Netduino_Control
    5. Dim remoteIPAddress As IPAddress
    6. Dim ep As IPEndPoint
    7. Dim tnSocket As Socket
    8. Private t As New Threading.Thread(AddressOf Listen)
    9. Dim Command As String = ""
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    11. Call Connect(TextBox1.Text, TextBox2.Text)
    12. End Sub
    13. Public Sub Connect(ByRef dipaddress As String, ByVal port As String)
    14. remoteIPAddress = IPAddress.Parse(dipaddress.Trim)
    15. ep = New IPEndPoint(remoteIPAddress, CType(port.Trim, Integer))
    16. tnSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    17. Try
    18. tnSocket.Connect(ep)
    19. Catch oEX As SocketException
    20. MsgBox(oEX.ToString)
    21. Exit Sub
    22. End Try
    23. Try
    24. Wait(3000)
    25. t.Start()
    26. Catch ex As Exception
    27. End Try
    28. End Sub
    29. Public Sub Listen()
    30. Dim RecvString As String = String.Empty
    31. Dim NumBytes As Integer = 0
    32. Dim RecvBytes(255) As [Byte]
    33. Do While tnSocket.Connected = True
    34. Do
    35. NumBytes = tnSocket.Receive(RecvBytes, RecvBytes.Length, 0)
    36. RecvString = RecvString + Encoding.ASCII.GetString(RecvBytes, 0, NumBytes)
    37. Loop While NumBytes = 256
    38. RichTextBox1.Text = RecvString & vbCrLf
    39. Wait(1000)
    40. Loop
    41. End Sub
    42. Private Sub Wait(ByVal PMillseconds As Integer)
    43. Dim TimeNow As DateTime
    44. Dim TimeEnd As DateTime
    45. Dim StopFlag As Boolean
    46. TimeEnd = Now()
    47. TimeEnd = TimeEnd.AddMilliseconds(PMillseconds)
    48. StopFlag = False
    49. While Not StopFlag
    50. TimeNow = Now()
    51. If TimeNow > TimeEnd Then
    52. StopFlag = True
    53. End If
    54. Application.DoEvents()
    55. End While
    56. ' Cleanup
    57. TimeNow = Nothing
    58. TimeEnd = Nothing
    59. End Sub
    60. Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
    61. Dim SendBytes As [Byte]() = Encoding.ASCII.GetBytes(TextBox3.Text & vbCrLf)
    62. tnSocket.Send(SendBytes, SendBytes.Length, SocketFlags.None)
    63. End Sub


    Wie kann ich den Fehler beheben, bzw. was ist falsch? Verstehe ich nicht ganz...

    mfg

    gfc
    Zeile 50 ist doch eindeutig. Da du die Methode in einem anderen Thread ausführst kannst du von der aus nicht auf die Controls zugreifen->Du musst Thread-Safe arbeiten:
    [VB.NET] GUIHelper
    Les dir mal den Thread durch...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich danke dir, habe es mit dieser "Invoke" möglichkeit geschafft =)

    mfg & thx

    gfcwfzkm