在Windows Phone 7中,我正在进行简单的异步查找以通过uri查找图像,并将返回的二进制文件设置为图像控件的源。
public object SetImageFromUri(string uri)
{
var wc = new WebClient();
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);
wc.OpenReadAsync(new Uri(uri), wc);
return null;
}
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null && !e.Cancelled)
{
var image = new BitmapImage();
image.SetSource(e.Result);
//e.Result has a property in the memory stream labeled finalUri
//someImageControl.Source = image;
}
}
我的问题是 - 如何从e.Result中取出最终的uri属性,以便我可以看到它与之相关的图像控制
提前谢谢
答案 0 :(得分:2)
不是将WebClient作为第二个参数传递,而是传递Uri(或其他一些usefule状态信息)
wc.OpenReadAsync(new Uri(uri), uri);
然后,您可以在回调中访问此内容
var uri = (string)e.UserState;
答案 1 :(得分:1)
由于Reflection机制中实现了特定限制,您无法从沙盒代码访问内部内容。最终,你会想要使用这样的东西:
FieldInfo f = e.Result.GetType().GetField("_finalUri", BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Instance);
Uri n = (Uri)f.GetValue(e.Result);
但是,这会导致FieldAccessException
。如果您没有使用重定向URI,那么您可以简单地重用最初传递给您的方法的参数。如果没有,您需要检查HttpWebRequest并遵循idea I outlined a couple of days ago。
答案 2 :(得分:1)
您也可以直接绑定到Image,并使用LowProfileImageLoader,以避免在加载期间阻止UI线程。 (请记住设置FallBack图像)