ResourceManager.GetStream 方法

定义

从指定的资源返回非托管内存流对象。

重载

GetStream(String)

从指定的资源返回非托管内存流对象。

GetStream(String, CultureInfo)

使用指定的区域性从指定资源返回非托管内存流对象。

GetStream(String)

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs

重要

此 API 不符合 CLS。

从指定的资源返回非托管内存流对象。

C#
public System.IO.UnmanagedMemoryStream? GetStream (string name);
C#
public System.IO.UnmanagedMemoryStream GetStream (string name);
C#
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public System.IO.UnmanagedMemoryStream GetStream (string name);
C#
[System.Runtime.InteropServices.ComVisible(false)]
public System.IO.UnmanagedMemoryStream GetStream (string name);

参数

name
String

资源的名称。

返回

表示资源的非托管内存流对象。

属性

例外

指定资源的值不是 MemoryStream 对象。

name null

找不到可用资源集,并且没有默认资源。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题中的“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException Exceptions”部分。

默认区域性的资源驻留在找不到的附属程序集中。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题中的“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException Exceptions”部分。

示例

以下示例使用 GetStream(String) 方法检索应用打开的初始窗口中使用的位图。 名为 CreateResources.cs(for C#)或CreateResources.vb(for Visual Basic)的文件中的以下源代码生成一个名为 AppResources.resx 的 .resx 文件,其中包含序列化的图像。 在这种情况下,将从名为 SplashScreen.jpg; 的文件加载映像;可以修改文件名以替换自己的映像。

C#
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Resources;

public class Example
{
   public static void Main()
   {
      Bitmap bmp = new Bitmap(@".\SplashScreen.jpg");
      MemoryStream imageStream = new MemoryStream();
      bmp.Save(imageStream, ImageFormat.Jpeg);

      ResXResourceWriter writer = new ResXResourceWriter("AppResources.resx");
      writer.AddResource("SplashScreen", imageStream);
      writer.Generate();
      writer.Close();
   }
}

以下代码来自名为 GetStream.cs(for C#)或 GetStream.vb(for Visual Basic)的文件,然后检索资源并在 System.Windows.Forms.PictureBox 控件中显示图像。

C#
using System;
using System.Drawing;
using System.IO;
using System.Resources;
using System.Windows.Forms;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("AppResources", typeof(Example).Assembly);
      Bitmap screen = (Bitmap) Image.FromStream(rm.GetStream("SplashScreen"));

      Form frm = new Form();
      frm.Size = new Size(300, 300);

      PictureBox pic = new PictureBox();
      pic.Bounds = frm.RestoreBounds;
      pic.BorderStyle = BorderStyle.Fixed3D;
      pic.Image = screen;
      pic.SizeMode = PictureBoxSizeMode.StretchImage;

      frm.Controls.Add(pic);
      pic.Anchor = AnchorStyles.Top | AnchorStyles.Bottom |
                   AnchorStyles.Left | AnchorStyles.Right;

      frm.ShowDialog();
   }
}

可以使用以下批处理文件生成 C# 示例。 对于 Visual Basic,请将 csc 更改为 vbc,并将源代码文件的扩展从 .cs 更改为 .vb

csc CreateResources.cs
CreateResources

resgen AppResources.resx

csc GetStream.cs /resource:AppResources.resources

注解

GetStream 方法采用存储为 MemoryStream 对象的资源的名称,获取 Object 资源的值,并返回 UnmanagedMemoryStream 对象。 它要求你直接使用字节流,然后转换为对象。 此方法主要用于性能原因:将资源检索为字节流而不是显式对象可以提高性能。

返回的资源已本地化为当前线程的 UI 区域性,该区域性由 CultureInfo.CurrentUICulture 属性定义。 如果资源未针对该区域性进行本地化,资源管理器将使用回退规则来加载适当的资源。 如果未找到可用本地化资源集,ResourceManager 会回退到默认区域性的资源上。 如果未找到默认区域性的资源集,该方法将引发 MissingManifestResourceException 异常;如果预期资源集驻留在附属程序集中,则引发 MissingSatelliteAssemblyException 异常。 如果资源管理器可以加载适当的资源集,但找不到名为 name的资源,该方法将返回 null

IgnoreCase 属性确定 name 与资源名称的比较是否不区分大小写(默认值)或区分大小写。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

GetStream(String, CultureInfo)

Source:
ResourceManager.cs
Source:
ResourceManager.cs
Source:
ResourceManager.cs

重要

此 API 不符合 CLS。

使用指定的区域性从指定资源返回非托管内存流对象。

C#
public System.IO.UnmanagedMemoryStream? GetStream (string name, System.Globalization.CultureInfo? culture);
C#
public System.IO.UnmanagedMemoryStream GetStream (string name, System.Globalization.CultureInfo culture);
C#
[System.CLSCompliant(false)]
[System.Runtime.InteropServices.ComVisible(false)]
public System.IO.UnmanagedMemoryStream GetStream (string name, System.Globalization.CultureInfo culture);
C#
[System.Runtime.InteropServices.ComVisible(false)]
public System.IO.UnmanagedMemoryStream GetStream (string name, System.Globalization.CultureInfo culture);

参数

name
String

资源的名称。

culture
CultureInfo

要用于资源查找的区域性。 如果 culturenull,则使用当前线程的区域性。

返回

表示资源的非托管内存流对象。

属性

例外

指定资源的值不是 MemoryStream 对象。

name null

找不到可用资源集,并且没有默认资源。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题中的“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException Exceptions”部分。

默认区域性的资源驻留在找不到的附属程序集中。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题中的“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException Exceptions”部分。

注解

GetStream 方法采用存储为 MemoryStream 对象的资源的名称,获取 Object 资源的值,并返回 UnmanagedMemoryStream 对象。 它要求你直接使用字节流,然后转换为对象。 此方法主要用于性能原因:将资源检索为字节流而不是显式对象可以提高性能。

返回的资源已本地化为由 culture指定的区域性,或者对于由 CultureInfo.CurrentUICulture 属性指定的区域性(如果 culturenull)。 如果资源未针对该区域性进行本地化,资源管理器将使用回退规则来加载适当的资源。 如果未找到可用本地化资源集,ResourceManager 会回退到默认区域性的资源上。 如果未找到默认区域性的资源集,该方法将引发 MissingManifestResourceException 异常;如果预期资源集驻留在附属程序集中,则引发 MissingSatelliteAssemblyException 异常。 如果资源管理器可以加载适当的资源集,但找不到名为 name的资源,该方法将返回 null

IgnoreCase 属性确定 name 与资源名称的比较是否不区分大小写(默认值)或区分大小写。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1