c #Uri加载非确定性?

Mic*_*son 6 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);

    }
}
Run Code Online (Sandbox Code Playgroud)

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

有什么想法在这里发生了什么?

A.R*_*.R. 3

嗯,有点...MSDN 对 UriKind 是这么说的:

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

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

另一方面,如果您知道您的资源存储在哪里(并且您应该知道),我建议您不用再烦恼,并使用绝对 URI 来解析您的资源。每次都有效,而且幕后不会有任何愚蠢的代码在您最意想不到的时候给您带来麻烦。