如何使用ResourceManger,及使用ResourceManager过程中出错的找不到资源的错误

本文介绍如何使用.NET Framework中的ResourceManager类来高效地管理应用程序资源。通过示例代码展示资源的加载过程,并讨论了常见问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用ResourceManager 类可以在运行时访问资源。
ResourceManager 从具有特定的根目录名的公共源管理多个资源。并从程序集和资源文件检索资源。
默认实现加载所有资源名称,然后按需加载值,把它们存储起来,以供以后使用。
ResouceManger使用的内存比 ResourceSet 类少,假设并非加载所有的资源,但最初检索特定的资源可能要花比较长的时间。此外,  ResourceManager 实现支持对象序列化。最后,当不提供特定的本地化资源时,ResourceManager 对象提供回退资源查找,搜索独立于地区和非特定区域性的资源。

 

 

ResourceManager rm = new ResourceManager("learn.iconres", Assembly.GetExecutingAssembly());
    
object obj=rm.GetObject("14");
    
if (obj == null)
    
{
    MessageBox.Show(
"对不起,不能取得对象");
    
return;
    }

    Bitmap bmp
=(Bitmap)obj;
    
this.pictureBox1.Image = bmp;

 

使用ResouceManger容易产生找不到资源的资源的情况,在这种情况下,通常是没有能够加载资源文件,解决这一问题可以
使用Reflector打开程序集在Resouces目录下就能看到每一个资源的名字,然后在程序集中改正来就可以.

通常的错误是将资源文件放在Properties目录下,然后在加入资源时没有写Properties
learn.Properties.cxystring.resources 

### C# 中使用 ResourceManager 进行资源管理 在 C# 开发中,`ResourceManager` 是一种强大的工具,用于管理和访问应用程序中的各种资源(如字符串、图像和其他数据)。以下是关于 `ResourceManager` 的具体用法以及示例。 #### 资源管理器的基础概念 `ResourceManager` 提供了一种机制来检索存储在程序集中的本地化资源。通过该类可以轻松获取嵌入到项目中的资源文件的内容。例如,在 WPF 或 WinForms 应用程序中,可以通过调用 `GetString` 方法从 `Properties.Resources` 获取特定的字符串资源[^1]。 #### 创建并使用 ResourceManager 实例 为了更好地理解如何操作 `ResourceManager`,下面提供了一个完整的代码示例: ```csharp using System; using System.Globalization; using System.Resources; namespace ResourceExample { class Program { static void Main(string[] args) { // 初始化 ResourceManager 对象 var resourceManager = Properties.Resources.ResourceManager; // 设置文化信息,默认为当前线程的文化设置 CultureInfo cultureInfo = new CultureInfo("en-US"); // 使用 GetString 方法获取指定键对应的字符串资源 string testString = resourceManager.GetString("TestString", cultureInfo); Console.WriteLine(testString); } } } ``` 上述代码展示了如何初始化一个 `ResourceManager` 并利用其 `GetString` 方法读取名为 `"TestString"` 的字符串资源。注意这里还设置了具体的区域性 (`CultureInfo`) 来支持多语言环境下的资源加载。 #### 多线程场景下资源共享注意事项 当涉及到多线程应用时,如果多个线程可能同时尝试修改或访问同一份共享资源,则需要考虑同步问题。虽然 `ResourceManager` 自身是线程安全的,但如果自定义逻辑涉及其他非线程安全的对象,则应引入适当的锁定策略。例如,可采用互斥体 (Mutex) 类型实现跨进程间的线程同步[^2]: ```csharp private static readonly Mutex _mutex = new Mutex(); public static string GetSafeResourceString() { _mutex.WaitOne(); try { return Properties.Resources.TestString; } finally { _mutex.ReleaseMutex(); } } ``` 此片段演示了如何保护对全局变量或其他静态成员函数内的资源访问过程免受并发冲突的影响。 --- ### 总结 以上介绍了有关 C# 编程环境下运用 `ResourceManager` 执行基本任务的方法论,并附带实际案例说明。无论是单一线程还是复杂的分布式系统架构设计里,合理配置与维护这些外部依赖项都是至关重要的环节之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值