代码之家  ›  专栏  ›  技术社区  ›  John

如何在多线程循环中使用委托

  •  0
  • John  · 技术社区  · 7 年前

    我试图用元素快速填充组合框。如果我反复浏览它们,延迟时间对我来说太长了(几秒钟)。所以在研究了这些选项之后,我尝试使用一个并行循环来异步完成它。然而,我在填充组合框时遇到了一个跨线程错误,因此我尝试使用委托子项,但vb不允许我说“add\u item是一种类型,不能用作表达式。”我的代码如下:

    Parallel.For(0, search_results.Count - 1, Sub(x)
                                                  add_item(search_box, search_results(x)(0) & " - " & search_results(x)(1) & " " & search_results(x)(2))
                                              End Sub)
    
    
    Private Delegate Sub add_item(ByVal sb As ComboBox, ByVal txt As String)
    
    Private Sub update_search_box(ByVal sb As ComboBox, ByVal txt As String)
        If sb.InvokeRequired Then
           sb.Invoke(New add_item(AddressOf update_search_box), New Object() {sb, txt})
        Else
           sb.Items.Add(txt)
        End If
    End Sub
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Visual Vincent    7 年前

    add_item 是您用来 参考 到您的原始 update_search_box 方法

    您已在中使用委托 update\u search\u框 方法本身,所以您只需调用实际的方法:

    Parallel.For(0, search_results.Count - 1, Sub(x)
                                                  update_search_box(search_box, search_results(x)(0) & " - " & search_results(x)(1) & " " & search_results(x)(2))
                                              End Sub)