Как я могу передать информацию с запросом WebClient для идентификации объекта, который загружается?

У меня есть набор пользовательских объектов под названием 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;

5
задан Edward Tanguay 9 March 2010 в 17:41
поделиться

1 ответ

Существует OpenDataAsync перегрузка, которая принимает объект токена пользователя. Вы должны получить этот объект в OpenReadCompletedEventArgs, в UserState свойстве (унаследованном от AsyncCompletedEventArgs).

6
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: