Thread übergreifender vorgang klappt nicht

  • VB.NET

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

    Thread übergreifender vorgang klappt nicht

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Imports System.Net
    4. Imports System.ComponentModel
    5. Public Class Form1
    6. Private Delegate Sub hallo(ByVal text)
    7. Dim server As System.Net.Sockets.TcpListener = Nothing
    8. Dim port As Integer = 13000
    9. Dim localAddr As IPAddress = IPAddress.Parse("127.0.0.1")
    10. Dim bytes(1024) As Byte
    11. Dim data As String = Nothing
    12. Dim client As TcpClient
    13. Dim stream As NetworkStream
    14. Dim i As Integer
    15. Dim threade As System.Threading.Thread
    16. Dim ii As String
    17. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    18. threade = New Threading.Thread(AddressOf listener)
    19. threade.Start()
    20. End Sub
    21. Private Sub listener()
    22. server = New System.Net.Sockets.TcpListener(localAddr, port)
    23. server.Start()
    24. While True
    25. client = server.AcceptTcpClient()
    26. stream = client.GetStream()
    27. i = stream.Read(bytes, 0, bytes.Length)
    28. While (i <> 0)
    29. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i)
    30. Dim testt As New hallo(AddressOf textaendern)
    31. testt.Invoke(data)
    32. threade.Abort()
    33. End While
    34. End While
    35. End Sub
    36. Private Sub textaendern(ByVal text)
    37. Label1.Text = text
    38. End Sub
    39. End Class


    Hey alle zusammen :) ich bin neu hier und noch ein anfänger was programmieren angeht :P,

    ich habe ein folgendes Problem:

    Ich habe probiert einen tcp listener zu bauen was auch bis jetzt ganz gut funktioniert hat :D. Da mir aber schnell aufgefallen ist das das Programm sich aufhängt. Und das wenn ich meinen Kenntnissen glauben schätzen kann an der endlos schleife hängt ;) also habe ich die endlos schleife in einen eigenen thread gepackt. Aber jz soll natürlich das empfangene auch ausgegeben werden. Also habe ich probiert eine thread übergreifende Prozedur zu schreiben was aber leider nicht so richtig funktioniert... :/

    Bitte helft mir sitze schon heute seit 6 uhr da dran und gestern auch schon einen ganzen tag aber ich komme einfach nicht auch die richtige lösung :D

    *Thread verschoben*

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

    1. Pack am besten den gesamten Thread in eine separate Klasse, das ist besser und übersichtlicher.
    2. Ein Thread sollte sich immer selbst beenden, also einfach die ThreadStart-Prozedur verlassen.
    3. Sieh mal nach, ob der TcpListener auch asynchrone Methoden anbietet, also nicht pollen, sondern auf Events warten.
    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:

    Ein Thread sollte sich immer selbst beenden

    Ein Thread sollte vor allem NIE mit Abort ABGEBROCHEN werden. Abort kann überall erfolgen und die Anwendung ist danach in einem NICHT DEFINIERTEN Zustand!

    Merksatz: Thread.Abort() ist MAXIMALST böse!

    msdn.microsoft.com/en-us/magazine/cc163644.aspx
    As with my method timeouts example in the July 2005 issue, I'll caution you against using Thread.Abort to control the lifetime of a thread, especially if you have little knowledge about the implementation of the code you're aborting. An abort inside of a critical region could spell disaster for an entire AppDomain, and while a polite abort does signficantly reduce the window of disaster to very tiny slivers, that one time out of 1,000 could lead to a deadlock or resource leak or worse.
    was meinst mit die thread start prozedur einfach verlsassen, weil sich ja ein thread selbst beendet das verstehe ich nicht? und was ist mit dem dritten punkt gemeint da sind wohl meine kenntnisse ein bisschen zu schlecht für ;) wäre cool wenn du mir das ein bissel erläutern könntest :)

    woalala schrieb:

    was meinst mit die thread start prozedur einfach verlsassen, weil sich ja ein thread selbst beendet das verstehe ich nicht?
    Deutsches Spraches. ;(

    VB.NET-Quellcode

    1. Private Sub listener()
    2. If Fertich Then
    3. Exit Sub
    4. End If
    5. End Sub
    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!
    @TE: leider folgt die Aufmerksamkeit in Foren meist vorwiegend den letzten Posts - dabei werden die entscheidenden Hinweise meist recht früh gegeben.

    Mir sieht dein Code ganz i.O. aus, nur die Zeilen #35, #36 sind Grütze.

    Aber dazu äußert sich picoflop bereits in post#4 und post#6

    Also: Zeilen #35, #36 und post #4 ,#6 - darauf sollteste dich konzentrieren, wennde dein Prob lösen möchtest.