BitmapImage.ImageOpened事件未触发

4

我正在尝试下载一张图片,并在下载完成时触发一个事件。我使用了以下代码:

BitmapImage btest = new BitmapImage(new Uri("http://www.google.com/images/srpr/logo4w.png"));
btest.ImageOpened += btest_ImageOpened;

void btest_ImageOpened(object sender, RoutedEventArgs e)
{
    throw new NotImplementedException();
}

然而,ImageOpened事件将不会触发。如果我使用以下方法将图像控件的源设置为BitmapImage

image.Source = btest;

它确实会触发。为什么只有在将BitmapImage发送器设置为图像的源时,ImageOpened事件才会触发?


1
我猜测 - 它从未被使用 - 因此它从未加载或打开 - 只是一个想法,但我认为很有道理。 - NSGaga-mostly-inactive
你是对的。原来BitmapImages只有在需要时才会加载。 - msbg
你想让我也发布一个答案吗?如果它帮助你做了正确的事情,那么你可以点赞或关闭。 - NSGaga-mostly-inactive
4个回答

5
我自己解决了这个问题。默认情况下,BitmapImage在必要时不会被初始化。BitmapImage的默认值CreateOptionsBitmapCreateOptions.DelayCreation。只需要将CreateOptions设置为BitmapCreateOptions.None即可解决这个问题。
我的工作代码如下:
BitmapImage btest = new BitmapImage(new Uri("http://www.google.com/images/srpr/logo4w.png"));
btest.CreateOptions = BitmapCreateOptions.None;
btest.ImageOpened += btest_ImageOpened;

void btest_ImageOpened(object sender, RoutedEventArgs e)
{
    throw new NotImplementedException();
}

1
BitmapImage的CreateOptions的默认值是BitmapCreateOptions.None。要解决这个问题,您只需要将CreateOptions设置为BitmapCreateOptions.None即可。 - Vitalii Vasylenko
我无法让它工作 - 可能是因为btest.CreateOptions = BitmapCreateOptions.None已经是默认值。还有其他解决方案吗? - Cam
1
根据文档,这不是默认设置。BitmapCreateOptions.DelayCreation是默认设置。将其更改为none似乎也不起作用。 - Paul Wade
@VitaliiVasylenko 回顾几个月后,我意识到应该说BitmapCreateOptions.DelayCreation是默认值。正在修复。 - msbg

1

根据我们的讨论,我会发布这篇文章 - 因为它帮助了OP找到正确的解决方案。

我猜测 - 它从未被使用过 - 因此它从未加载或打开 - 只是一个想法,但我认为很有道理。


谢谢,虽然没有完全解决问题,但确实让我朝着正确的方向思考了。 - msbg

1
我的建议,也许可以帮助其他人... 在页面上放置一个图像控件,并在xaml中连接任何事件和源是可以的,事件会触发。然而,当我在代码中加载位图图像并设置图像控件的源时,图像控件的事件不会触发,尽管图像已经成功加载。我尝试了上面提到的所有位图选项,但似乎都没有起作用。最终我处理了位图图像的ImageOpened事件,而不是图像控件的事件,这样就触发了事件。需要注意的是,在此阶段,图像控件尚未完全加载图像,因此您将需要参考位图图像以获取详细信息,而不是图像控件。

0
在我的Windows Phone 8.0 Silverlight应用程序中,当我将创建选项设置为BitmapCreateOptions.BackgroundCreation时,我会收到事件ImageOpened。
当设置为BitmapCreateOptions.DelayCreation(默认值)或BitmapCreateOptions.None时,我不会收到该事件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接