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。