我有一个正在完成一项任务的程序。 例如,我有一个包含一些链接的列表框。
另一方面,我的程序是逐个打开它们,但我希望它能更快完成 我为此目的使用了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
答案 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)
祝你好运