我有一张我需要从网上获取的图片,但我需要等待图片下载后再做其他事情。 所以这是我的代码
BitmapImage bm = new BitmapImage(new Uri(imageUri));
bm.CreateOptions = BitmapCreateOptions.None;
bm.ImageOpened += (sd, args) => {
Debug.WriteLine("loaded");
mre.Set();
};
mre.WaitOne();
Debug.WriteLine(imageUri);
问题是ImageOpened
事件处理程序中的代码永远不会运行。所以我的程序就此停止
有没有办法做到这一点?
答案 0 :(得分:0)
您应该使用WebClient下载Web图像。这是一个异步方法:
private Task<BitmapImage> downloadImage(string imageUri)
{
TaskCompletionSource<BitmapImage> tcs = new TaskCompletionSource<BitmapImage>();
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
WebClient wc = new WebClient();
wc.OpenReadCompleted += (s, e) =>
{
if (e.Error == null && !e.Cancelled)
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(e.Result);
tcs.SetResult(bmp);
}
else { tcs.SetResult(null); }
};
wc.OpenReadAsync(new Uri(imageUri, UriKind.Absolute));
return tcs.Task;
}
以下是如何使用它:
BitmapImage img = await downloadImage("web url goes here");
if (img == null)
{
//Error handling goes here
}