带有ResourceWriter的MemoryStream中的动态资源

本文关键字:动态 资源 MemoryStream ResourceWriter 带有 | 更新日期: 2023-09-27 18:01:04

我正在用C#和WPF开发一个应用程序;我正在为MemoryStream创建一个资源。

var ms = new MemoryStream();
var rWriter = new ResourceWriter(ms);
rWriter.AddResource("key1", "value1");
rWriter.AddResource("key2", "value2");
rWriter.AddResource("key3", "value3");
rWriter.Generate();
rWriter.Close();

在这里之前一切都很好,但是,我不知道如何使用这个资源?你能帮我使用吗?

带有ResourceWriter的MemoryStream中的动态资源

将资源读入流后,需要将其添加到MergedDictionaries中,以便在应用程序中使用。这方面的一个例子可能看起来像这样:

var resourceInfo = skinAssembly.GetManifestResourceInfo(resourceName);
if (resourceInfo.ResourceLocation != ResourceLocation.ContainedInAnotherAssembly)
{
    var resourceStream = skinAssembly.GetManifestResourceStream(resourceName);
    using (var resourceReader = new ResourceReader(resourceStream))
    {
        foreach (DictionaryEntry entry in resourceReader)
        {
            if (IsRelevantResource(entry, bamlResourceName))
            {
                skinBamlStreams.Add(entry.Value as Stream);
            }
        }
    }
}

上面的代码取自我的演示应用程序,你可以在GitHub上看到它的完整源代码。

protected override sealed void LoadResources()
{
    var skinResolver = PreLoadResources();
    try
    {
        var skinBamlStreams = skinResolver.GetSkinBamlStreams(_fullName, _resourceName);
        foreach (var resourceStream in skinBamlStreams)
        {
            var skinResource = BamlHelper.LoadBaml<ResourceDictionary>(resourceStream);
            if (skinResource != null)
            {
                Resources.Add(skinResource);
            }
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
    finally
    {
        PostLoadResources();
    }
}