我几个月后开始学习编码。 今天我想编写密码管理器代码。一切正常,但如果主机无法访问,则获取图标功能会出现问题。此功能用于从网页获取favicon。
Try
For Each myItem As ListViewItem In lv_data.Items
Dim baseurl = myItem.Text
Dim url As Uri = New Uri(baseurl)
If url.HostNameType = UriHostNameType.Dns Then
Dim iconURL = "http://" & url.Host & "/favicon.ico"
Dim request As System.Net.WebRequest = System.Net.HttpWebRequest.Create(iconURL)
Dim response As System.Net.HttpWebResponse = request.GetResponse()
Dim stream As System.IO.Stream = response.GetResponseStream()
imglist.Images.Add(Image.FromStream(stream))
lv_data.Items.Item(myItem.Index).ImageIndex = myItem.Index
End If
Next
Catch ex As WebException
End Try
某些服务器响应异常:
无法解析远程主机
。 当发生这种情况时,每个循环的整体停止。我正在寻找一种忽略该错误的方法,并继续列表视图中的下一项。
任何人都可以给我一个提示或者一个解决方案。
祝你好运, Der King
答案 0 :(得分:0)
首先移动循环中的try catch
For Each myItem As ListViewItem In lv_data.Items
Try
Dim baseurl = myItem.Text
Dim url As Uri = New Uri(baseurl)
...
Catch
End Try
Next
这将允许您的代码在检索favicon.ico时遇到异常时在foreach循环内继续
下一个问题是如何处理图像列表中的图像。当您遇到异常,因为您的代码无法检索图标时,您不会向ImageList添加任何内容
此时,您的ImageList和ListView.Items不包含相同数量的元素,因此您无法使用myItem.Index
来引用ImageList中的图像。
但是,因为图像刚刚添加到上一行的ImageList中,所以您确定所需的图像是ImageList的最后一个元素。所以你可以使用ImageList.Images.Count
属性(少于1)
imglist.Images.Add(Image.FromStream(stream))
myItem.ImageIndex = imgList.Images.Count - 1
(请注意,您可以在此上下文中直接使用myItem)