如何通过WebClient请求传递信息以识别加载的对象?

时间:2010-03-09 17:06:13

标签: c# silverlight events webclient

我有一组名为 DataItems 的自定义对象,其中包含图片的URI,我想加载并放入 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);
}

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

解答:

Franci的建议有效,以下是其他任何人寻找这条线的路线:

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

1 个答案:

答案 0 :(得分:6)

有一个OpenDataAsync重载,它接受一个用户令牌对象。您应该在OpenReadCompletedEventArgs UserState属性中继承此对象(继承自AsyncCompletedEventArgs)。