У меня есть набор пользовательских объектов под названием DataItems, которые содержат URIs изображений, которые я хочу загрузить и вставить набор для моего приложения Silverlight для использования.
Поскольку я обрабатываю каждый 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);
}
Но как я передаю IdCode текущего DataItem до моего метода OpenReadCompleted так, чтобы, когда то изображение завершило загрузку, я мог также ОПРЕДЕЛИТЬ его по данным ее IdCode?
Работы предложения Franci, вот строки для кого-либо еще ищущего это::
webClientImgDownloader.OpenReadAsync(new Uri(dataItem.SourceUri,
UriKind.Absolute), dataItem);
...
DataItem dataItem = e.UserState as DataItem;
Существует OpenDataAsync
перегрузка, которая принимает объект токена пользователя. Вы должны получить этот объект в OpenReadCompletedEventArgs
, в UserState
свойстве (унаследованном от AsyncCompletedEventArgs
).