当程序关闭时,有没有办法让 ThreadPool 完成其工作?
当我使用普通线程时,我只是在 FormClosing 事件中加入了 t.Join。但是 ThreadPool 似乎没有任何 Join 方法?
当程序关闭时,有没有办法让 ThreadPool 完成其工作?
当我使用普通线程时,我只是在 FormClosing 事件中加入了 t.Join。但是 ThreadPool 似乎没有任何 Join 方法?
我想我可能已经解决了..
Imports System.Threading
Module Module1
Sub Main()
Dim t As New Tool
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
Thread.Sleep(1500)
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
Thread.Sleep(1500)
t.Update()
Thread.Sleep(1500)
t.Update()
Thread.Sleep(5500)
t.Update()
Thread.Sleep(10000)
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
End Sub
End Module
Public Class Tool
'Thread Stuff
Private threads As Integer = 0
Private threadsdone As AutoResetEvent = New AutoResetEvent(False)
Public Sub WaitToJoin()
If Interlocked.Read(threads) > 0 Then
threadsdone.WaitOne(New TimeSpan(0, 0, 30)) ' just to be sure not to lock forever, by some wierd reason, a timeout on 30 sec is added
End If
End Sub
Public Sub Update()
Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf HardWork), "Doing dome hard work...")
End Sub
Public Sub HardWork(ByVal state As Object)
Dim num As Integer = Interlocked.Increment(threads)
Console.WriteLine(num & " - " & state)
Thread.Sleep(10000)
If Interlocked.Decrement(threads) = 0 Then
threadsdone.Set()
End If
End Sub
End Class