C#Uri加载不确定性?

| 我正在尝试从文件系统上保存的文件加载一些BitmapImage。我有一个键和相对文件路径的字典。不幸的是,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(而不是相对路径)解决了该问题。
string baseDir = AppDomain.CurrentDomain.BaseDirectory;

foreach(KeyValuePair<string, string> imageLocation in _imageLocations)
{
    try
    {
        BitmapImage img = new BitmapImage();
        img.BeginInit();
        img.UriSource = new Uri(\"file:///\" + baseDir + @imageLocation.Value, UriKind.Absolute);

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

    }
}

要回复问题请先登录注册