如何在C#中获取图像的高度和宽度

时间:2012-06-15 12:12:27

标签: c# windows-runtime microsoft-metro

我试图从网站获取图像的高度和宽度,但它总是返回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风格的应用程序中支持任何替代或任何修复

1 个答案:

答案 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;
        ...
        }