c# Uri 加载不确定?

标签 c# wpf uri bitmapimage

我正在尝试从文件系统中保存的文件中加载一些 BitmapImages。我有一个键和相对文件路径的字典。不幸的是,Uri 构造函数在加载图像的方式上似乎是不确定的。

这是我的代码:

foreach(KeyValuePair<string, string> imageLocation in _imageLocations)
{
    try
    {
        BitmapImage img = new BitmapImage();
        img.BeginInit();
        img.UriSource = new Uri(@imageLocation.Value, UriKind.Relative);

        img.EndInit();
        _images.Add(imageLocation.Key, img);
    }
    catch (Exception ex)
    {
        logger.Error("Error attempting to load image", ex);

    }
}

不幸的是,有时 Uris 会作为相对文件 Uris 加载,有时它们会作为相对 Pack Uris 加载。似乎没有任何押韵或理由可以以哪种方式加载。有时我会以一种方式加载所有 Uris,或者只是加载几个,或者大部分,并且每次运行代码时它都会改变。

知道这里发生了什么吗?

最佳答案

好吧,有点……MSDN 对 UriKind 有这样的说法:

绝对 URI 的特点是对资源的完整引用(例如:http://www.contoso.com/index.html),而相对 URI 取决于先前定义的基本 URI(例如:/index.html)

如果你跳进反射器并环顾四周,你会发现代码有很多路径可以用来解析相对 URI 应该是什么。无论如何,这并不是说它是不确定的,更多的是它只是许多开发人员感到沮丧的一个主要来源。您可以做的一件事是使用“BaseUriHelper”类来深入了解您的 uri 是如何解析的。

另一方面,如果您知道资源的存储位置(您应该知道),我建议您不要头疼,使用绝对 URI 来解析您的资源。每次都有效,并且在您最意想不到的时候,幕后没有愚蠢的代码来绊倒您。

关于c# Uri 加载不确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5709954/

相关文章:

c# - WCF 中出现此异常的原因

c# - BringIntoView 不工作

android - 是否有适用于所有移动设备的适用于 Facebook 应用程序的通用 URI 方案?

URI 太长了

c# - Sharepoint 提供商托管用户权限

c# - 如何保护 .net 类库使其不能被其他应用程序引用?

c# - 标记界面的目的是什么?

c# - 在 VS2010 中添加引用

c# - 新行在 C#/WPF 中的 MessageBox 中不起作用

elasticsearch - 需要通过URI示例进行Elasticsearch多索引搜索