2009-10-17 57 views
1

我需要能夠以獨特方式使用WebClient,我需要將圖像作爲字節流下載並將其分配給圖像,這裏有多個圖像和要分配的項目,並且這些將顯示在列表中。此應用程序是Silverlight 3應用程序,解決方案必須是可在Silverlight中使用的解決方案。如何使用OpenReadAsync和WebClient下載數據並分配給UserToken?

我有一個下載方法我想使用:

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屬性讀取,但是這是隻讀的 - 我需要設置下載的方法內的目標到下載的圖像。

下載方法中如何設置下載方法中的UserToken作爲UserToken傳入的圖像源/位圖圖像?

回答

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傳遞。

+0

ToByteArray是因爲圖像是作爲字節序列下載的,然後轉換爲一個數組作爲圖像再次作爲另一個問題的解決方案的一部分,但是這個代碼工作,除了那個問題 - 但它確實回答這個問題。 – RoguePlanetoid 2009-10-28 15:27:58

相關問題