我有一个VB.NET控制台程序,我在for循环中启动了10个线程。 循环结束后,10个线程将运行,我需要代码暂停(完成for循环后),直到所有线程完成/中止。
我该怎么做?
以下是示例:
Private Sub TheProcessThread()
While True
'some coding
If 1 = 1 Then
End If
End While
Console.WriteLine("Aborting Thread...")
Thread.CurrentThread.Abort()
End Sub
Sub Main()
Dim f as Integer
Dim t As Thread
For f = 0 To 10
t = New Thread(AddressOf TheProcessThread)
t.Start()
Next
' HERE !! how I can be sure that all threads are finished/aborted for continue with the code below ?
' more vb.net code...
End Sub
答案 0 :(得分:0)
这应该有所帮助。我对你的代码进行了一些修改,但它基本上是一样的。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim f As Integer
Dim t As Task
Dim l As New List(Of Task)
For f = 0 To 10
t = New Task(AddressOf TheProcessThread)
t.Start()
l.Add(t)
Next
' HERE !! how I can be sure that all threads are finished/aborted for continue with the code below ?
' more vb.net code... End Sub
Task.WaitAll(l.ToArray) 'wait for all threads to complete
Stop
End Sub
Private Sub TheProcessThread()
While True
'some coding
If 1 = 1 Then
Threading.Thread.Sleep(1000)
Exit While
End If
End While
Console.WriteLine("Aborting Thread...")
'Thread.CurrentThread.Abort() 'End Sub causes thread to end
End Sub
答案 1 :(得分:0)
保持简单和老派,只需像这样使用Join()
:
Imports System.Threading
Module Module1
Private R As New Random
Sub Main()
Dim threads As New List(Of Thread)
For f As Integer = 0 To 10
Dim t As New Thread(AddressOf TheProcessThread)
threads.Add(t)
t.Start()
Next
Console.WriteLine("Waiting...")
For Each t As Thread In threads
t.Join()
Next
Console.WriteLine("Done!")
Console.ReadLine()
End Sub
Private Sub TheProcessThread()
Thread.Sleep(R.Next(3000, 10001))
Console.WriteLine("Thread Complete.")
End Sub
End Module