хорошо, вот мой код:
For i = 0 To 10
Dim tTemp As Threading.Thread = New Threading.Thread(AddressOf dwnld)
tTemp.IsBackground = True
'tTemp.Start(geturl)
lThreads.Add(tTemp)
'MsgBox(lThreads.Item(i).ThreadState)
Next
Я создаю список потоков с 10 потоками, назначаю им функцию, свойства и добавляю их в список.
'While ListBox2.Items.Count > 0
For i = 0 To lThreads.Count - 1
If (lThreads.Item(i).ThreadState = 12) Then
If (ListBox2.Items.Count > 0) Then
lThreads.Item(i).Start(geturl)
If (i = lThreads.Count - 1) Then
i = 0
End If
Else
Exit For
End If
'MsgBox(lThreads.Item(i).ThreadState)
ElseIf (lThreads.Item(i).ThreadState = 16) Then
lThreads.RemoveAt(i)
Dim tTemp As Threading.Thread = New Threading.Thread(AddressOf dwnld)
tTemp.IsBackground = True
lThreads.Add(tTemp)
If (i = lThreads.Count - 1) Then
i = 0
End If
End If
Next
Что происходит, я вижу, что потоки останавливаются после завершения функции dwnld. Поэтому я сначала проверяю состояние (12 означает фон и не запущен). В случае 12 запустите поток, а в случае 16 (остановлен) удалите этот конкретный поток и добавьте другой поток, как я добавил 10. выше.
Также есть проверка, когда счетчик i достигает последнего числа, перезапустите весь цикл, назначив i = 0.
Программа загружает некоторые веб-страницы, URL передается из списка box2. Geturl передаст URL и удалит его из списка. Поэтому, когда список пуст, выйдите из цикла for.
Но приведенный выше код работает только 11 раз и не перезапускается. Я пытался использовать lable и goto, но он просто зависает.
Может кто-нибудь сказать мне, что делать?
Мне нужно, чтобы 10 потоков продолжали загружать веб-страницы, а когда список пуст, выйдите из функции.