一旦通过枚举清单资源或硬编码一个您想要的清单资源而知道了清单资源的名称,就可以通过 Assembly 类的 GetManifestResourceStream 方法将该清单资源作为原始字节流进行加载,如下所示:
using System.IO;public Form1() { ... // Get this type's assembly Assembly assem = this.GetType().Assembly; // Get the stream that holds the resource // NOTE1: Make sure not to close this stream! // NOTE2: Also be very careful to match the case // on the resource name itself Stream stream = assem.GetManifestResourceStream("Azul.jpg"); // Load the bitmap from the stream this.BackgroundImage = new Bitmap(stream);}
因为资源可以像类型名称一样有冲突,所以最好用资源自己的“命名空间”来嵌入资源,该操作可以使用 /resource 开关的扩展格式来完成:
C:\>csc myApp.cs /resource:c:\...\azul.jpg,ResourcesApp.Azul.jpg
注意在要嵌入的文件名的逗号后面使用的备用资源名称。备用资源名称允许您为资源任意地提供时间嵌套名称,不管文件名是什么。它是设置在程序集中的备用名称,如图 2 所示。
图 2. 使用备用名称的嵌入资源
下面是使用备用名称的更新后的资源加载代码:
public Form1() { ... // Get this type's assembly Assembly assem = this.GetType().Assembly; // Load a resource with an alternate name Stream stream = assem.GetManifestResourceStream("ResourcesApp.Azul.jpg"); // Load the bitmap from the stream this.BackgroundImage = new Bitmap(stream);}
为了更方便,如果您的资源和加载资源的类碰巧使用了相同的命名空间,则可以将类的类型作为可选的第一参数传递给 GetManifestResourceStream:
namespace ResourcesApp { public class Form1 : Form { public Form1() { ... // Get this type's assembly Assembly assem = this.GetType().Assembly; // Load the resource using a namespace // Will load resource named "ResourcesApp.Azul.jpg" Stream stream = assem.GetManifestResourceStream(this.GetType(), "Azul.jpg"); // Load the bitmap from the stream this.BackgroundImage = new Bitmap(stream); } ... }}
文章来源于领测软件测试网 https://www.ltesting.net/