我一直在程序退出时将线程放置在全局线程列表(将所有调用的线程添加到其中)中,并在最近一次运行(未结束)中注意到,线程数从未降到44以下,因此循环再次被激活,从未退出。当查看列表中其余的44个线程时,它们的名称为“ Nothing”,其状态被中止。
问题是:如何处理不会处理的线程列表中的中止线程?我是否需要筛选线程的特定状态,然后仅处置它们?还是我可以跳过此方法,让GC清理内存中的线程?
Sub OnApplicationExit()
Dim currentThreads As ProcessThreadCollection = Process.GetCurrentProcess().Threads
For Each thread As ProcessThread In currentThreads
thread.Dispose()
Next
cont:
For Each thr As Thread In threadList
Try
If thr IsNot Nothing Then
thr.Abort()
End If
Catch ex As ThreadAbortException
'ex.ToString()
End Try
Next
If threadList.Count > 0 Then GoTo cont
End Sub