2010-03-09 8 views
5

J'ai une collection d'objets personnalisés appelé DataItems qui contiennent URIs de images que je veux charger et mettre dans une collection pour mon application Silverlight à utiliser.Comment puis-je transmettre des informations avec une requête WebClient pour identifier l'objet chargé?

Comme je traite chaque DataItem, je reçois son SourceUri (par exemple "http://..../picture001.png") et démarrer chargement:

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); 
    } 
} 

Puis, quand le chargement de cette image est terminée, je sauve l'image dans une collection :

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); 
} 

Mais comment transmettre l'IdCode du DataItem actuel à ma méthode OpenReadCompleted de sorte que lorsque cette image a terminé le chargement, je peux aussi l'IDENTIFIER en fonction de son IdCode?

RÉPONSE:

travaux de suggestion de Franci, voici les lignes pour ceux qui cherchent d'autre pour cette ::

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

Répondre

6

Il y a une surcharge OpenDataAsync qui prend un objet jeton d'utilisateur. Vous devriez obtenir cet objet dans le OpenReadCompletedEventArgs, dans la propriété UserState (hérité de AsyncCompletedEventArgs).

+0

exactement ce que je cherchais, merci –