Thread in VB.NET won"t stop (w/code)

Thread in VB.NET won"t stop (w/code)

am 18.04.2008 00:11:00 von jp2msft

I have a windows application that does not stop running whenever the
application exits.

Could someone fill me in on what I am doing wrong?

Here is the relevant code:
=================================
Private m_thTCP As Thread
Private m_listener As TcpListener

Public Sub New()
InitializeComponent() ' This call is required by the Windows Form
Designer.
m_thTCP = New Thread(AddressOf TCPServer)
ThreadStart()
End Sub

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
ThreadStop()
End Sub

Private Sub Restart_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles RestartButton.Click
ThreadRestart()
End Sub

Private Sub ThreadStop() ' Stopping TCP Listener Service
Try
If (m_thTCP.ThreadState <> ThreadState.Stopped) Then
Dim i As Int16 = 0
m_listener.Stop()
Application.DoEvents()
Thread.Sleep(200)
While ((i < 100) And (m_thTCP.ThreadState <> ThreadState.Stopped))
' gives thread 5 secs to stop!
m_thTCP.Abort()
Application.DoEvents()
Thread.Sleep(50)
i += 1
End While
End If
Catch ex As Exception
MsgBox(ex.Message)
Finally
Console.WriteLine("ThreadState is {0}", m_thTCP.ThreadState.ToString())
m_thTCP = Nothing
End Try
End Sub

Public Sub ThreadRestart() ' Restarting TCP Listener Service
Try
ThreadStop()
m_thTCP = New Thread(AddressOf TCPServer)
ThreadStart()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub ThreadStart()
Try
m_thTCP.Start()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub TCPServer()
Try ' Starting TCP Listener from thread
m_listener = New TcpListener(IPAddress.Any, m_port)
m_listener.Start()
While True
Dim client As TcpClient = m_listener.AcceptTcpClient()
' Waits until data is available on the network
Dim stream As NetworkStream = client.GetStream()
Dim bytes(client.ReceiveBufferSize) As Byte
stream.Read(bytes, 0, CInt(client.ReceiveBufferSize))
Dim data As String = Encoding.ASCII.GetString(bytes)
data = data.TrimEnd(data.Substring(data.Length - 1))
If (data.Substring(3) <> String.Empty) Then
Dim item As String = data.Substring(3)
If (item <> "") Then
Console.WriteLine("Data Read: {0}", item)
End If
End If
stream.Close()
client.Close()
End While
Catch ex2 As SocketException
Console.WriteLine("SocketException: {0}", ex2)
Catch ex1 As ThreadAbortException ' dismiss this one
Exit Sub
Catch ex As Exception
MsgBox(ex.Message)
Finally
Try
m_listener.Stop()
Catch ex As Exception ' Throws Exception if it never was opened
End Try
End Try
End Sub