C# 为什么BitmapImage.CacheOption会影响图像的加载位置?

C# 为什么BitmapImage.CacheOption会影响图像的加载位置?,c#,wpf,filenotfoundexception,C#,Wpf,Filenotfoundexception,我正在创建一个位图图像,如下所示: bitmapImage.BeginInit(); bitmapImage.UriSource = new Uri(resourceName, UriKind.Relative); bitmapImage.EndInit(); 如果我使用这段代码(使用默认的CacheOption),那么无论图像是否具有资源的构建操作,或者是否标记为“复制到输出目录”,图像(PNG)都会很好地加载 但是,如果我将CacheOption设置为OnLoad,如下所示 bitmapI

我正在创建一个
位图图像
,如下所示:

bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(resourceName, UriKind.Relative);
bitmapImage.EndInit();
如果我使用这段代码(使用默认的CacheOption),那么无论图像是否具有资源的构建操作,或者是否标记为“复制到输出目录”,图像(PNG)都会很好地加载

但是,如果我将
CacheOption
设置为
OnLoad
,如下所示

bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri(resourceName, UriKind.Relative);
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.EndInit();
。。。然后它将不会从资源中加载-仅从文件中加载(复制到输出目录)。如果我尝试从资源加载,我会得到一个异常,明确表示它必须从文件加载:

未处理FileNotFoundException

找不到文件“C:\Users\Victor\Documents\Visual Studio 2012\Projects\AddingForJack\AddingForJack\bin\Debug\Images\robot.png”


我对
CacheOption
的理解很简单,就是加载图像时会影响图像内存的存在。为什么这也会影响图像的加载位置?

bitmapImage.UriSource
之后设置断点,并显示
bitmapImage.UriSource
中的内容。并显示
resourceName
中的内容。当您要加载图像资源时,不应依赖
UriKind.Relative
。改用a。为了找出您的示例中到底发生了什么,您必须查看框架源代码。您可以获取例如JetBrains dotPeek和inspect PresentationCore.dll。