有没有办法启动相同线程形式的foreach循环?
Sub
For Each lvItem As ListViewItem In _ListView.SelectedItems
tThread = New Thread(AddressOf Me.myFunction())
tThread .Start()
Next
End Sub
Sub myFunction()
//Code
End Sub在我的例子中,当我从列表中选择一个项目时,它是working fine...but,当我选择多个文件时,它不工作。
发布于 2010-12-18 05:02:45
我想从ListView中选择多个文件(这是文件路径),并将它们转换为mp3文件,但使用上述解决方案。它成功地转换了第一个选定的文件,但随后停止。
为每个文件创建单独的线程并不是最优的。在某些情况下,这实际上会导致比按顺序执行所有线程更差的性能,因为您的系统将花费太多时间在不同线程之间来回切换。相反,您希望选择少量线程,并按这些线程对您的项进行时间排队。
有很多方法可以实现这一点:
ThreadPool.QueueUserWorkItem()中的内置功能。这很棒,但跟踪项目进度可能会比较麻烦。发布于 2010-12-18 00:27:19
我猜,您可能希望存储所有线程,而不是让一个变量tThread来存储线程,所以应该有一个线程的List。所以就像这样:
Sub
Dim threads as New List(Of Thread)
For Each lvItem As ListViewItem In _ListView.SelectedItems
tThread = New Thread(AddressOf Me.myFunction())
tThread .Start()
threads.Add(tThread)
Next
End Sub否则,如果有其他问题,请提供更多详细信息。
发布于 2010-12-18 04:51:52
是否确实选择了这些项目?我在列表视图中尝试了以下几个项目,并按预期工作。
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
For Each lvItem As ListViewItem In ListView1.SelectedItems
Dim t As Threading.Thread = New Threading.Thread(AddressOf myFunction)
t.Start(lvItem)
Next
End Sub
Private Sub myFunction(ByVal lvi As Object)
Dim lvItem As ListViewItem = CType(lvi, ListViewItem)
Debug.WriteLine(lvItem.Text)
End Subhttps://stackoverflow.com/questions/4472519
复制相似问题