C# 未激发BitmapImage ImageOpen事件

C# 未激发BitmapImage ImageOpen事件,c#,events,windows-runtime,bitmapimage,C#,Events,Windows Runtime,Bitmapimage,在本例中,为什么ImageOpen事件未被激发?我正在Win8的WinRT应用程序中使用它 BitmapImage myImage = new BitmapImage(); myImage.ImageOpened += myImage_ImageOpened; myImage.UriSource = new Uri("ms-appx:/Assets/Image.png"); private void myImage_ImageOpened(object sender, Rou

在本例中,为什么ImageOpen事件未被激发?我正在Win8的WinRT应用程序中使用它

BitmapImage myImage = new BitmapImage();        
myImage.ImageOpened += myImage_ImageOpened;
myImage.UriSource = new Uri("ms-appx:/Assets/Image.png");


private void myImage_ImageOpened(object sender, RoutedEventArgs e)
{
    int pixelHeight = (sender as BitmapImage).PixelHeight;
}

我的问题是ImageOpen事件没有被激发。我想检查图像的像素高度和像素宽度,但如果我没有获得此事件,我就无法进行检查。

WinRT具有延迟加载行为。除非实际显示图像,否则不会加载图像。如果确实需要强制加载以执行某些布局调整,则可以使用这种解决方法强制加载:

 private async void Download()
    {
        Windows.UI.Xaml.Media.Imaging.BitmapImage image = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        image.ImageFailed += image_ImageFailed;
        image.ImageOpened += image_ImageOpened;
        var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png", UriKind.Absolute));
        var stream = await file.OpenStreamForReadAsync();
        await image.SetSourceAsync(stream.AsRandomAccessStream());
    }

    void image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Failed");
        dg.ShowAsync();
    }

    void image_ImageOpened(object sender, RoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Opened");
        dg.ShowAsync();
    }

WinRT具有延迟加载行为。除非实际显示图像,否则不会加载图像。如果确实需要强制加载以执行某些布局调整,则可以使用这种解决方法强制加载:

 private async void Download()
    {
        Windows.UI.Xaml.Media.Imaging.BitmapImage image = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        image.ImageFailed += image_ImageFailed;
        image.ImageOpened += image_ImageOpened;
        var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Logo.scale-100.png", UriKind.Absolute));
        var stream = await file.OpenStreamForReadAsync();
        await image.SetSourceAsync(stream.AsRandomAccessStream());
    }

    void image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Failed");
        dg.ShowAsync();
    }

    void image_ImageOpened(object sender, RoutedEventArgs e)
    {
        MessageDialog dg = new MessageDialog("Image Opened");
        dg.ShowAsync();
    }