在vb.net中进行多线程来模拟任务

时间:2014-09-14 15:53:03

标签: vb.net multithreading foreach

我有一个正在完成一项任务的程序。 例如,我有一个包含一些链接的列表框。

另一方面,我的程序是逐个打开它们,但我希望它能更快完成 我为此目的使用了for-each循环。 所有我想要做的是我想给每个2或3链接到不同的线程或如果有任何其他解决方案,使其更快请告诉我。 这是我程序中的一小段代码。

For value As Integer = 1 To TextBox1.Text

        If (value = TextBox1.Text) Then
            Exit For

        End If
        Dim page As String = "-p-" & value

        Extractor.ScrapLinks(txturl.Text + page, lstbox)
        lbllinks.Text = lstbox.Items.Count

    Next

1 个答案:

答案 0 :(得分:0)

我不知道Extractor.ScrapLinks实际上做了什么,但似乎你需要访问UI线程,你不能创建多个UI线程,所以最终你将按顺序处理它们

你可以做些什么来改进解决方案是从UI控件读取你想要的数据,然后在一个单独的线程上处理这些数据,完成后你可以通过在UI线程上调用一些方法将结果填充到UI中如下图所示

Delegate Sub PerformOperationDel(value As Integer)
Sub PerformOperation(value As Integer)
    Dim page As String = "-p-" & value
    Extractor.ScrapLinks(txturl.Text + page, lstbox)
    lbllinks.Text = lstbox.Items.Count
End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For value As Integer = 1 To CInt(TextBox1.Text) - 1
        lstbox.BeginInvoke(New PerformOperationDel(AddressOf PerformOperation))
    Next
End Sub

您可以使用后台工作人员,但请注意您无法访问DoWork中的UI控件,但您可以在完成的工作中访问它们(请参阅:Background worker proper way to access UI

祝你好运