我试图从网站获取图像的高度和宽度,但它总是返回0,因为图像尚未下载所以我使用以下代码仍然无法工作,因为图像将仅在方法之后开始下载结束,所以它挂起
someMethod
{
foreach(string imagepath in paths){
IsDownloaded = false;
image = new BitmapImage(new Uri(imagepath));
image.ImageOpened += image_ImageOpened;
while (!IsDownloaded) ;
/// code that will use image.PixelHeight only if it satisfy a condition then break
}
private void image_ImageOpened(object sender, RoutedEventArgs e)
{
IsDownloaded = true;
}
是否有人在Metro风格的应用程序中支持任何替代或任何修复
答案 0 :(得分:4)
你不能使用这样的异步编程 - 删除这一行:
while (!IsDownloaded) ;
将所有内容放在image_ImageOpened
方法中。
我们通常将其称为“链接”,当您拥有一堆异步方法时,必须在每个方法完成后继续处理。
我自己的获取宽度/高度代码的示例:
BitmapImage imageSource = new BitmapImage();
private void getImage()
{
Uri uir= new Uri("PATH", UriKind.Absolute);
imageSource.ImageOpened += new EventHandler<RoutedEventArgs>(imageopenened);
}
void imageopened(object sender, RoutedEventArgs e)
{
HEIGHT = ImageSource.PixelHeight;
WIDTH = ImageSource.PixelWidth;
...
}