首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从foreach循环启动同一线程不起作用

从foreach循环启动同一线程不起作用
EN

Stack Overflow用户
提问于 2010-12-18 00:22:09
回答 3查看 1.6K关注 0票数 0

有没有办法启动相同线程形式的foreach循环?

代码语言:javascript
复制
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,当我选择多个文件时,它不工作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-18 05:02:45

我想从ListView中选择多个文件(这是文件路径),并将它们转换为mp3文件,但使用上述解决方案。它成功地转换了第一个选定的文件,但随后停止。

为每个文件创建单独的线程并不是最优的。在某些情况下,这实际上会导致比按顺序执行所有线程更差的性能,因为您的系统将花费太多时间在不同线程之间来回切换。相反,您希望选择少量线程,并按这些线程对您的项进行时间排队。

有很多方法可以实现这一点:

  • 您可以编写自定义代码,使线程数基于物理处理器核心数(通常大于2或核心数-1)。这是很多额外的工作,而且容易出错。
  • 你可以使用ThreadPool.QueueUserWorkItem()中的内置功能。这很棒,但跟踪项目进度可能会比较麻烦。
  • 您可以使用Task Parallel Library。这需要.Net 4,但它可能是您目前最好的选择。预先学习这些概念的额外工作也将是一个巨大的回报,听起来微软正在围绕任务概念建立.Net 5中一些更重要的功能。
票数 1
EN

Stack Overflow用户

发布于 2010-12-18 00:27:19

我猜,您可能希望存储所有线程,而不是让一个变量tThread来存储线程,所以应该有一个线程的List。所以就像这样:

代码语言:javascript
复制
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

否则,如果有其他问题,请提供更多详细信息。

票数 0
EN

Stack Overflow用户

发布于 2010-12-18 04:51:52

是否确实选择了这些项目?我在列表视图中尝试了以下几个项目,并按预期工作。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4472519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档