WebException - 阻塞每个循环
WebException - Blocking For Each Loop
几个月以来我一直在学习编码。
今天我想编写一个密码管理器。一切正常,但如果无法访问主机,获取图标功能就会出现问题。这个函数是从网页中获取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
一些服务器响应异常:
Remote host could not be resolved
。
当这种情况发生时,每个循环的整个过程都会停止。我正在寻找一种方法来忽略该错误并继续处理列表视图中的下一项。
任何人都可以给我提示或解决方案。
此致,
国王
首先将 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)
几个月以来我一直在学习编码。 今天我想编写一个密码管理器。一切正常,但如果无法访问主机,获取图标功能就会出现问题。这个函数是从网页中获取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
一些服务器响应异常:
Remote host could not be resolved
。 当这种情况发生时,每个循环的整个过程都会停止。我正在寻找一种方法来忽略该错误并继续处理列表视图中的下一项。
任何人都可以给我提示或解决方案。
此致, 国王
首先将 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)