Edw*_*uay 5 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当该图像的加载完成后,我将图像保存在一个集合中:
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,如何将当前DataItem的IdCode传递给我的OpenReadCompleted方法,以便在该图像完成加载后,我还可以根据其IdCode识别它?
弗朗西的建议是有效的,这里有其他人寻找这条线的路线::
webClientImgDownloader.OpenReadAsync(new Uri(dataItem.SourceUri,
UriKind.Absolute), dataItem);
...
DataItem dataItem = e.UserState as DataItem;
Run Code Online (Sandbox Code Playgroud)
有一个OpenDataAsync带有用户令牌对象的重载.您应该OpenReadCompletedEventArgs在UserState属性(继承自AsyncCompletedEventArgs)中获取此对象.
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |