如何刷新backgroundworker - VB.NET [英] How to refresh the backgroundworker - VB.NET

查看:96
本文介绍了如何刷新backgroundworker - VB.NET的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在点击按钮时刷新后台工作人员进行刷新。这是为了在刷新后刷新标签。但是,当我这样做时,我收到错误后台工作人员很忙。所以我只希望背景工作者等到忙碌结束再次运行它。请帮助。



我尝试过:



I want to refresh the backgroundworker to refresh when I click on a button. This is for the label to refresh just after the refresh. However, when I do that, I am getting error Background worker is busy. So I want only the backgroundworker to wait until the busy is over and run it again. Kindly help.

What I have tried:

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        BackgroundWorker1.WorkerSupportsCancellation = True


        Try
            Dim ur As New Uri("http://www.find-ip-address.org/")
            Dim req As HttpWebRequest = HttpWebRequest.Create(ur)
            Dim res As HttpWebResponse = req.GetResponse()
            If (res.StatusCode = HttpStatusCode.OK) Then
                Dim receiveStream As Stream = res.GetResponseStream()
                Dim readStream As StreamReader = Nothing
                If (res.CharacterSet = Nothing) Then
                    readStream = New StreamReader(receiveStream)
                Else
                    readStream = New StreamReader(receiveStream, Encoding.GetEncoding(res.CharacterSet))
                    Dim data As String = readStream.ReadToEnd()
                    res.Close()
                    readStream.Close()
                    Dim left = "My IP Country Name:"
                    Dim right = "IP Address Lookup Location"
                    Dim indexLeft As Integer = data.IndexOf(left)
                    Dim indexRight As Integer = data.IndexOf(right)
                    lookupData = data.Substring(indexLeft + left.Length, indexRight - indexLeft - left.Length)
                    flagLocation = extractSubject("</font>  <img src='", "'><br>My IP Country Continent<")
                End If
            End If
        Catch
        End Try
    End Sub
    Private Function extractSubject(ByVal left As String, ByVal right As String)
        Try
            Dim indexLeft As Integer = lookupData.IndexOf(left)
            Dim indexRight As Integer = lookupData.IndexOf(right)
            Return lookupData.Substring(indexLeft + left.Length, indexRight - indexLeft - left.Length)
        Catch
            Return "Not Resolved!"
        End Try
    End Function
#Region "informations"
    Private Function publicIP() As String
        Return extractSubject(">My IP Address lookup for ", " show IP which")
    End Function
#End Region
    Public Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        tbPublicIP.Text = publicIP()
        BackgroundWorker1.CancelAsync()
    End Sub

推荐答案

1)我建议你研究样本BGW代码并学习如何正确编码BGW。



BackgroundWorker Class(System.ComponentModel) [ ^ ]



2)由于可以异步访问网络,因此您使用BGW也不是最佳选择。



[ ^ ]
1) I suggest you study the sample BGW code and learn how to code a BGW properly.

BackgroundWorker Class (System.ComponentModel)[^]

2) Since the web can be accessed asynchronously, your use of BGW is not the best choice either.

Walkthrough: Accessing the Web by Using async and await (C#) | Microsoft Docs[^]


这篇关于如何刷新backgroundworker - VB.NET的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆