我在网上看到了很多这些:
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行代码。我更愿意知道这两种方法究竟做了什么,以及它们应该(或不应该)被调用的原因。
答案 0 :(得分:3)
我认为他们这样做,只是为了与其他代码保持一致。 BitmapImage有几个属性,在加载图像之前只需设置一次。例如DecodePixelHeight
和DecodePixelWidth
。
为了正确设置它们,您必须使用BeginInit
方式。当然,当有人展示示例时,他们只使用他们习惯的相同语法,并且只删除不相关属性的行。
如果您不需要设置其中任何一个,您可以简要说明语法。
答案 1 :(得分:2)
这两个方法只能成对使用并抛出InvalidOperationException
的事实告诉我他们stall
BitmapImage
的初始化。在BitmapImage
初始化之前,将在两个方法之间进行任何属性初始化。
正如我在评论中所说,
我想这里没有问题,因为你有一个方便的构造函数,它将Uri作为参数。