对于下一个或不同的URL图标加载循环

时间:2015-01-05 19:39:10

标签: vb.net visual-studio-2010 picturebox

我有一个应用程序,基本上是各种网页的启动器。我试图在OnLoad中用每个URL的FavICON填充我表单中的所有pictureBox。确切地说是25。我应该使用For和Next或其他类型的循环方法吗?循环部分的新功能,所以所有和任何帮助都表示赞赏。

我只加载一个PictureBox的代码如下:

Private Sub MainFormWPL_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    'Dim WebICON As New WebBrowser

    MainURLLoader.Navigate(Label1.Text)
    'URLText.Text = WebBrowser1.Url.ToString
    Try
        Dim url As Uri = New Uri(Label1.Text)
        If url.HostNameType = UriHostNameType.Dns Then
            Dim icon = "http://" & url.Host & "/favicon.ico"
            Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(icon)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()
            Dim stream As System.IO.Stream = response.GetResponseStream
            Dim favicon = Image.FromStream(stream)
            PictureBox1.Image = favicon
        Else
        End If
    Catch ex As Exception

    End Try
End Sub

1 个答案:

答案 0 :(得分:0)

假设您有Label1 - > PictureBox1,一直到Label25 - > PictureBox25:

Public Class Form1

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim matches() As Control
        For i As Integer = 1 To 25
            matches = Me.Controls.Find("Label" & i, True)
            If matches.Length > 0 Then
                Dim website As String = matches(0).Text
                matches = Me.Controls.Find("PictureBox" & i, True)
                If matches.Length > 0 AndAlso TypeOf matches(0) Is PictureBox Then
                    Dim PB As PictureBox = DirectCast(matches(0), PictureBox)
                    Task.Run(New Action(Sub() GetFavIcon(website, PB)))
                End If
            End If
        Next
    End Sub

    Private Sub GetFavIcon(ByVal website As String, ByVal PB As PictureBox)
        Dim url As Uri = New Uri(website)
        If url.HostNameType = UriHostNameType.Dns Then
            Dim icon = "http://" & url.Host & "/favicon.ico"
            Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(icon)
            Dim response As System.Net.HttpWebResponse = request.GetResponse()
            Dim stream As System.IO.Stream = response.GetResponseStream
            Dim favicon = Image.FromStream(stream)
            PB.Invoke(New MethodInvoker(Sub() PB.Image = favicon))
            response.Close()
        End If
    End Sub

End Class