1

我正在尝试从网站获取图像的高度和宽度,但它始终返回 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 风格的应用程序中,有没有人对此有任何替代或任何修复

4

1 回答 1

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;
        ...
        }
于 2012-06-15T12:19:19.867 回答