【问题标题】:WPF - check resource exists without structured exception handlingWPF - 在没有结构化异常处理的情况下检查资源是否存在
【发布时间】:2011-06-11 01:27:25
【问题描述】:

有什么方法可以检查程序集中是否存在资源而不必使用异常处理?我目前正在从几个程序集中加载图像,如果它们不存在,那么我正在处理 IOException,这会导致相当多的开销。

【问题讨论】:

    标签: c# .net wpf exception-handling embedded-resource


    【解决方案1】:

    从here复制答案:

    public static bool ResourceExists(string resourcePath)
    {
        var assembly = Assembly.GetExecutingAssembly();
    
        return ResourceExists(assembly, resourcePath);
    }
    
    public static bool ResourceExists(Assembly assembly, string resourcePath)
    {
        return GetResourcePaths(assembly)
            .Contains(resourcePath);
    }
    
    public static IEnumerable<object> GetResourcePaths(Assembly assembly)
    {
        var culture = System.Threading.Thread.CurrentThread.CurrentCulture;
        var resourceName = assembly.GetName().Name + ".g";
        var resourceManager = new ResourceManager(resourceName, assembly);
    
        try
        {
            var resourceSet = resourceManager.GetResourceSet(culture, true, true);
    
            foreach(System.Collections.DictionaryEntry resource in resourceSet)
            {
                yield return resource.Key;
            }
        }
        finally
        {
            resourceManager.ReleaseAllResources();
        }
    }
    

    【讨论】:

      【解决方案2】:

      这样的东西对你有用吗?

      // Member Variable
      string [] resourceNames;
      
      // Function
      Boolean ResourceExists(string resourceName)
      {
          if (resourceNames == null)
          {
              resourceNames =  
                  Assembly.GetExecutingAssembly().GetManifestResourceNames(); 
          }
      
          return resourceNames.Contains(resourceName);
      }
      

      【讨论】:

      • 谢谢,我们最终使用了类似的方法,即构建包含在程序集中的资源字典,然后在检索图像时检查该字典。
      猜你喜欢
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 2012-03-04
      • 1970-01-01
      相关资源
      最近更新 更多