2010-03-09 52 views
5

我有自定义对象的集合称为DataItems包含图像0​​的URI的,我想加载,并把收集在我的Silverlight应用程序中使用。如何通过WebClient请求传递信息来识别被加载的对象?

当我处理每个DataItem的,我得到它的SourceUri(例如 “http://..../picture001.png”),并启动它装载

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

然后,当该图像的加载已完成,我救

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

:在集合图像但是,如何将当前DataItem的IdCode传递给我的OpenReadCompleted方法,以便当该图像完成加载后,我还可以根据其IdCode识别它?

答:

弗郎的建议的作品,这里是为别人寻找这::

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

回答

6

有一个OpenDataAsync重载需要用户令牌对象的行。您应该在OpenReadCompletedEventArgs,UserState属性(继承自AsyncCompletedEventArgs)中获取此对象。

+0

到底我在找什么,谢谢 – 2010-03-09 17:42:05