okが私のコードです:マルチスレッド - ここに多くのスレッドを追加し、操作を続行
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を代入してループ全体を再起動します。
プログラムはいくつかのWebページをダウンロードし、urlはlistbox2から渡されます。 geturlはurlを渡してリストから削除します。したがって、リストボックスが空の場合、forループを終了します。
ただし、上記のコードは11回だけ実行されており、再起動しません。私はlableとgotoを使ってみましたが、単純にハングします。
誰に教えてもらえませんか?
私が望むのは、10個のスレッドを維持してWebページのダウンロードを維持し、リストが空の場合はその機能を終了することです。
ok私はそれらをチェックアウトします。私にこのことを知らせてくれてありがとう:) – xhammer
@ xhammer:問題はありません。また、これらの新しいテクニックで問題が発生した場合は、もう一度別の質問を投稿してください。 –