为什么使用简单的BitmapImages使用BeginInit()?

时间:2011-11-30 10:15:45

标签: wpf syntax bitmapimage

我在网上看到了很多这些:

var b = new BitmapImage();
b.BeginInit();
b.UriSource = new Uri(myPath, UriKind.RelativeOrAbsolute);
b.EndInit();
myImage.Source = b;

现在,就我而言,我首先会选择更紧凑的版本:

myImage.Source = new BitmapImage(new Uri(myPath, UriKind.RelativeOrAbsolute));

有什么理由说我应该写第一个而不是第二个?

在这种情况下,“BeginInit()”和“EndInit()”到底是做什么的,在第二个版本中不会这样做?

我猜的是“什么都没有”,但话又说回来,我已经有足够的经验向我展示WPF比我想象的更微妙了......

编辑:为了清楚起见,我的观点并不是我绝对想要备用4行代码。我更愿意知道这两种方法究竟做了什么,以及它们应该(或不应该)被调用的原因。

2 个答案:

答案 0 :(得分:3)

我认为他们这样做,只是为了与其他代码保持一致。 BitmapImage有几个属性,在加载图像之前只需设置一次。例如DecodePixelHeightDecodePixelWidth。 为了正确设置它们,您必须使用BeginInit方式。当然,当有人展示示例时,他们只使用他们习惯的相同语法,并且只删除不相关属性的行。 如果您不需要设置其中任何一个,您可以简要说明语法。

答案 1 :(得分:2)

这两个方法只能成对使用并抛出InvalidOperationException的事实告诉我他们stall BitmapImage的初始化。在BitmapImage初始化之前,将在两个方法之间进行任何属性初始化。

正如我在评论中所说,

我想这里没有问题,因为你有一个方便的构造函数,它将Uri作为参数。