为啥为 BitmapImage 对象设置 URISource 需要 Begin 和 End init?

Posted

技术标签:

【中文标题】为啥为 BitmapImage 对象设置 URISource 需要 Begin 和 End init?【英文标题】:Why do setting up URISource for BitmapImage object requires a Begin and End init?为什么为 BitmapImage 对象设置 URISource 需要 Begin 和 End init? 【发布时间】:2012-05-25 10:37:00 【问题描述】:

我试图通过后面的代码设置 wpf 图像类的源属性,但由于未知原因它不起作用。

这就是我的代码的样子

 1 BitmapImage img = new BitmapImage();
 2 img.UriSource = new Uri("C:\\data\\pictures\dkn.jpg");
 3 pict.Source = img;

然后我做了一些谷歌搜索,我发现我需要更改我的代码,如下所示。

 1 BitmapImage img = new BitmapImage();
 2 img.BeginInit();
 3 img.UriSource = new Uri("C:\\data\\pictures\dkn.jpg");
 4 img.EndInit(); 
 5 pict.Source = img;

但我无法理解的是上面的第 2 行和第 4 行。在设置 urisource 属性之前和之后开始和结束 init 的意义是什么。我期望 urisource 属性的行为与正常的 clr 属性一样。

请有什么想法。

【问题讨论】:

参见ISupportInitialize 中的备注部分。您也可以使用带有 Uri 参数的 BitmapImage constructor 并写入 pict.Source = new BitmapImage(new Uri("C:\\data\\pictures\dkn.jpg")); 当然还有BitmapImage中的备注部分。 【参考方案1】:

Begin and End init 指定对象支持简单的事务通知,用于属性的批量初始化 - MSDN

【讨论】:

以上是关于为啥为 BitmapImage 对象设置 URISource 需要 Begin 和 End init?的主要内容,如果未能解决你的问题,请参考以下文章

在UWP 将BitmapImage转换为 WriteableBitmap

将BitmapImage转换为System.Windows.Media.Brush

C# wpf BitmapImage从本地资源获得未知像素大小的图片,如何将其对象设为指定大小

Windows Phone - 裁剪 BitmapImage [关闭]

在 Windows Phone 和 Silverlight 中将 Image Feed 转换为 BitmapImage

Windows 8 如何将 BitmapImage 作为流打开?