Net begonnen met C# onder Windows. Dit is mijn eerste serieuze poging tot OO, GUI en Windows programmeren.
Ik probeer een simple gebruikers-interface in elkaar te draaien die met een server kan communiceren. Het programma is een client.
Stap 1:
open een blocking socket
Stap 2:
indien succes, start een thread voor inkomende communicatie
de thread roept een functie aan die in een eindeloze loop de socket probeert te lezen / leest
Stap 3:
doe iets zinvols als er data binnenkomt
Dit werkt probleemloos (inclusief een server die stopt met luisteren); het probleem is echter dat als ik het programma stop, het nog steeds voorkomt in de proces lijst (task manager). Pas als ik de server stop, verdwijnt het proces.
Ik ben nu op zoek naar een manier om de thread te stoppen. M.i. zou dit moeten kunnen door in de form-closing event een thread.abort op te nemen. Helaas lijkt dat niet te werken. Waarom?
Ik kan waarschijnlijk een select gebruiken in de lees functie zodat de thread nooit langer dan bv een paar seconden blokkeert. Maar voor mijn gevoel is dat niet de juiste weg.
Ik heb geprobeerd de socket te sluiten (socket.shutdown en socket.close) in de form-closing event, maar dat lijkt geen goed idee te zijn. Het programma crashed (OK, in ieder geval blijft er niks draaien
). Als je echter single-step door het programma gaat, gebeurt dat niet, dus dat is kl....te debuggen.
Dus de hanvraag: hoe stop ik een thread.
Dit is de tweede 'poging'. In eerste instantie had ik een backgroundworker in gebruik, maar daar liep ik vast in het herstarten van de 'thread' nadat er data was binnen gekomen en verwerkt. Vandaar nu de poging tot threads.
PS op het moment geen source code bij de hand
Ik probeer een simple gebruikers-interface in elkaar te draaien die met een server kan communiceren. Het programma is een client.
Stap 1:
open een blocking socket
Stap 2:
indien succes, start een thread voor inkomende communicatie
de thread roept een functie aan die in een eindeloze loop de socket probeert te lezen / leest
Stap 3:
doe iets zinvols als er data binnenkomt
Dit werkt probleemloos (inclusief een server die stopt met luisteren); het probleem is echter dat als ik het programma stop, het nog steeds voorkomt in de proces lijst (task manager). Pas als ik de server stop, verdwijnt het proces.
Ik ben nu op zoek naar een manier om de thread te stoppen. M.i. zou dit moeten kunnen door in de form-closing event een thread.abort op te nemen. Helaas lijkt dat niet te werken. Waarom?
Ik kan waarschijnlijk een select gebruiken in de lees functie zodat de thread nooit langer dan bv een paar seconden blokkeert. Maar voor mijn gevoel is dat niet de juiste weg.
Ik heb geprobeerd de socket te sluiten (socket.shutdown en socket.close) in de form-closing event, maar dat lijkt geen goed idee te zijn. Het programma crashed (OK, in ieder geval blijft er niks draaien
Dus de hanvraag: hoe stop ik een thread.
Dit is de tweede 'poging'. In eerste instantie had ik een backgroundworker in gebruik, maar daar liep ik vast in het herstarten van de 'thread' nadat er data was binnen gekomen en verwerkt. Vandaar nu de poging tot threads.
PS op het moment geen source code bij de hand