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

时间:2018-03-13 18:35:00

标签: vb.net multithreading delegates

我正在尝试快速填充元素组合框。如果我遍历它们,延迟时间太长,我不喜欢(几秒钟)。因此,在研究选项后,我尝试使用并行循环来实现异步。但是,我收到填充组合框的交叉线程错误,因此我尝试使用委托子,但是vb不会让我说'#34; add_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 个答案:

答案 0 :(得分:0)

add_item是您用来引用到原始update_search_box方法的委托。

您已经在update_search_box方法本身中使用了委托,因此您需要做的就是调用实际方法:

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)