2010-03-09 11 views
5

Tengo una colección de objetos personalizados llamada DataItems que contienen URI de imágenes que desea cargar y poner en una colección para mi aplicación Silverlight de usar.¿Cómo puedo pasar información con una solicitud de WebClient para identificar el objeto que se carga?

Mientras procesar cada DataItem, consigo su SourceUri (por ejemplo, "http://..../picture001.png") e iniciarlo carga:

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

Luego, cuando la carga de esa imagen ha completado, ahorro la imagen en una colección :

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

¿Pero cómo paso el IdCode del DataItem actual a través de mi método OpenReadCompleted para que cuando la imagen haya terminado de cargarse, también pueda IDENTIFICARla de acuerdo con su IdCode?

RESPUESTA:

obras sugerencia de Franci, aquí están las líneas para cualquier persona en busca de esta ::

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

Respuesta

6

Hay una sobrecarga OpenDataAsync que toma un objeto token de usuario. Debería obtener este objeto en el OpenReadCompletedEventArgs, en la propiedad UserState (heredado de AsyncCompletedEventArgs).

+0

exactamente lo que estaba buscando, gracias –

Cuestiones relacionadas