2010-03-09 8 views
5

Mam kolekcję obiektów niestandardowych nazwie DataItems które zawierają URI z obrazów, że chcę, aby załadować i umieścić w kolekcji dla mojego Silverlight aplikację.Jak mogę przekazywać informacje za pomocą żądania WebClient, aby zidentyfikować obiekt, który zostanie załadowany?

Jak przetworzyć każdy DataItem, mam jej SourceUri (np "http://..../picture001.png") i uruchomić go loading:

void LoadNext() 
{ 
    WebClient webClientImgDownloader = new WebClient(); 
    if (loadedItemIndex < RegisteredDataEntries.Count()) 
    { 
     DataItem dataItem = RegisteredDataEntries[registeredIdCodes[loadedItemIndex]]; 
     if (dataItem.Kind == DataItemKind.Image) 
     { 
      webClientImgDownloader.OpenReadCompleted += 
       new OpenReadCompletedEventHandler(webClientImgDownloader_OpenReadCompleted); 
      webClientImgDownloader.OpenReadAsync(new Uri(dataItem.SourceUri, 
       UriKind.Absolute)); 
      webClientImgDownloader.AddObject(dataItem); //???????????????????? 
      webClientImgDownloader.Headers["idCode"] = dataItem.IdCode; //????????????? 
      webClientImgDownloader.ResponseHeaders["idCode"] = dataItem.IdCode; //????????????? 
     } 
    } 
    else 
    { 
     OnLoadingComplete(this, null); 
    } 
} 

wtedy, gdy obciążenie tego obrazu jest zakończone, zapisać obraz w kolekcji:

void webClientImgDownloader_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    dataItemIdCode = e.DataItem.IdCode; //??????????????????? 
    dataitemIdCode = ((DataItem)sender).IdCode; //????????????????????? 

    BitmapImage bitmap = new BitmapImage(); 
    bitmap.SetSource(e.Result); 

    Image image = new Image(); 
    image.Source = bitmap; 
    Images.Add(dataItemIdCode, image); 
} 

Ale w jaki sposób przekazać IdCode bieżącego DataItem do mojej metody OpenReadCompleted, aby po zakończeniu ładowania tego obrazu mogłem IDENTYFIKOWAĆ go zgodnie ze swoim kodem identyfikacyjnym?

ODPOWIEDŹ:

prace sugestia Franci, oto są linie dla nikogo innego szukający tego ::

webClientImgDownloader.OpenReadAsync(new Uri(dataItem.SourceUri, 
    UriKind.Absolute), dataItem); 
... 
DataItem dataItem = e.UserState as DataItem; 

Odpowiedz

6

Jest takie OpenDataAsync przeciążenie, które zajmuje użytkownika obiektu tokenu. Powinieneś dostać ten obiekt do właściwości OpenReadCompletedEventArgs, UserState (odziedziczony po AsyncCompletedEventArgs).

+0

dokładnie to, czego szukałem, dzięki –

Powiązane problemy