vb.net - 后台 worker 不起作用... VB.Net

标签 vb.net backgroundworker

这是我的代码:

    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    For i = 0 To 1000
        Dim inum As String = i & "0"


        Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.google.nl/search?q=site:" & combobox1.Text & "&hl=nl&start=" & inum)
        Dim response As System.Net.HttpWebResponse = request.GetResponse

        Dim sr As System.IO.StreamReader = New System.IO.StreamReader(response.GetResponseStream())

        Dim sourcecode As String = sr.ReadToEnd
        Dim search As String = combobox1.Text
        Dim r As New System.Text.RegularExpressions.Regex("http://" & search & "/\w*")
        Dim matches As MatchCollection = r.Matches(sourcecode)


        For Each itemcode As Match In matches

            Dim item As String = (itemcode.ToString.Split("""").GetValue(0))
            Dim url As New Net.WebClient
            Dim str As String = url.DownloadString("http://www.prcheck.nl/results.php?url=" & item)

            If str.Contains(">0/10") Then
                ListBox1.Items.Add("(0/10) " & item)
            ElseIf str.Contains("1/10") Then
                ListBox1.Items.Add("(1/10) " & item)
            ElseIf str.Contains("2/10") Then
                ListBox1.Items.Add("(2/10) " & item)
            ElseIf str.Contains("3/10") Then
                ListBox1.Items.Add("(3/10) " & item)
            ElseIf str.Contains("4/10") Then
                ListBox1.Items.Add("(4/10) " & item)
            ElseIf str.Contains("5/10") Then
                ListBox1.Items.Add("(5/10) " & item)
            ElseIf str.Contains("6/10") Then
                ListBox1.Items.Add("(6/10) " & item)
            ElseIf str.Contains("7/10") Then
                ListBox1.Items.Add("(7/10) " & item)
            ElseIf str.Contains("8/10") Then
                ListBox1.Items.Add("(8/10) " & item)
            ElseIf str.Contains("9/10") Then
                ListBox1.Items.Add("(9/10) " & item)
            ElseIf str.Contains("10/10") Then
                ListBox1.Items.Add("(10/10) " & item)
            Else
                ListBox1.Items.Add("(0/10) " & item)

            End If

            Label2.Text = ListBox1.Items.Count
        Next



        If Not sourcecode.Contains("<b>Volgende</b>") Then
            MsgBox("")
            Exit For
        End If
    Next
End Sub

和combobox1.text = www.google.nl(示例)

按钮 1 的代码是:

BackgroundWorker1.RunWorkerAsync()

如果后台工作完成:

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    MsgBox("Done")
End Sub

如果我点击按钮 1,我会在半秒内收到消息:完成

代码有什么问题吗?

如果我将代码放在backgroundworker1中,就在button1中,它可以工作,但速度非常慢..

最佳答案

您只能从主应用程序线程内更新 UI,在这种情况下,您尝试通过后台工作线程创建的后台线程来执行此操作,这将引发您发现的异常。

您需要执行什么操作才能运行添加到主线程上的列表框的代码,您可以通过 BeginInvoke 执行此操作以及一个自定义委托(delegate),它将您要添加的项目作为参数,然后委托(delegate)可以将项目添加到列表框 - BeginInvoke 的文档中有一个如何执行此操作的示例。

关于vb.net - 后台 worker 不起作用... VB.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7139762/

相关文章:

iOS PjSip - 后台工作

c# - 如何处理在 BackgroundWorker 中运行的方法的状态

.net - 如何更改 Winforms 中的 TrackBar 刻度颜色?

c# - 日期时间自定义格式 - 将 AM/PM 显示为大写而不是 am/pm

php - vb.net 使用数组从数据表中获取数据

.net - FastColoredTextbox 问题滚动文本和定位插入符

c# - 如何使后台线程暂停然后继续单击按钮?

c# - 使用 ajax() 和 jsonp 调用 asp.net 远程 webservice .asmx 时出现意外标记 <

c# - 从不同线程传递数据时,是否有其他方法可以在 WPF 中调用?

c# - 将对象从 backgroundworker 传递到主线程