有没有办法启动相同的Thread表单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
在我的情况下,当我从列表中选择一个项目时,它工作正常......但是当我选择多个文件时,它会起作用。
答案 0 :(得分:1)
我想从ListView中选择多个文件(它们是文件路径)并将它们转换为mp3文件,但使用上述解决方案。它成功转换第一个选定的文件,但随后停止。
为每个文件创建单独的线程是次优的。在某些情况下,这实际上会导致更差性能,而不是按顺序执行它们,因为系统将花费太多时间在不同线程之间来回切换。相反,您希望选择少量线程并通过这些线程将项目排队等待时间。
有很多方法可以实现这个:
ThreadPool.QueueUserWorkItem()
中的内置功能。这很棒,但跟踪项目进度可能很棘手。答案 1 :(得分:0)
我猜测而不是让一个变量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
否则,如果还有其他问题,请提供更多详细信息。
答案 2 :(得分:0)
您确定选中了这些项目吗?我在listview中尝试了以下几个项目,它按预期工作。
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 Sub