我需要能够以某种方式使用WebClient,我需要将图像作为字节流下载并将其分配给图像,有多个图像和项目要分配,这些将出现在列表中。此应用程序是Silverlight 3应用程序,解决方案必须是在Silverlight中运行的应用程序。
我想使用下载方法:
Public Sub Download(ByRef Source As Uri, ByRef Target As BitmapImage)
Dim _Client As New WebClient
_Client.OpenReadAsync(Source, Target)
AddHandler _Client.OpenReadCompleted, AddressOf Downloaded
End Sub
下载事件处理程序(部分实现),它使用ToByteArray方法将下载的图像数据转换为字节数组。
Private Sub Downloaded(ByVal sender As Object, _
ByVal e As OpenReadCompletedEventArgs)
If Not e.Cancelled Then
Dim Bytes As Byte() = ToByteArray(e.Result)
Dim Bitmap As New BitmapImage
Bitmap.SetSource(e.Result)
' Set Target Bitmap Here
End If
End Sub
要设置为已下载图像(目标)的目标图像作为UserToken传递给OpenReadAsync方法,并且可以使用OpenReadCompletedEventArgs UserState属性读取,但这是ReadOnly - 我需要将Target设置为已下载的图像,在下载的方法中。
如何在下载方法中设置下载方法中的UserToken传入的图像源/位图图像?
答案 0 :(得分:0)
我会像这样重新安排这段代码: -
Public Function Download(ByVal Source As Uri) As BitmapImage
Dim client As New WebClient
Dim target As BitMapImage
client.OpenReadAsync(Source, target)
AddHandler client.OpenReadCompleted, AddressOf Downloaded
Return target
End Sub
Private Sub Downloaded(ByVal sender As Object, _
ByVal e As OpenReadCompletedEventArgs)
If Not e.Cancelled Then
DirectCast(e.UserState, BitmapImage).SetSource(e.Result)
End If
End Sub
注意这称为: -
myBitmap = Download(myUri)
下载完成后,将设置返回位图的来源。
ToByteArray
似乎没有任何用途,所以我删除了它。我也删除了ByRef传递。