【问题标题】:Load base data in Windows 8 app在 Windows 8 应用程序中加载基础数据
【发布时间】:2013-04-01 01:29:32
【问题描述】:

我是 Windows 8 应用开发的新手。我正在尝试移植我在 .NET 中编写的旧应用程序。此应用程序使用存储为四个 XML 文件的基础数据,这些文件作为“资源”添加到项目中,并使用 System.Xml.Serialization.XmlSerializer 对它们进行反序列化。

使用 Windows 8 应用商店应用传送此类数据的最佳方式是什么?只需将它们放在资产文件夹中?

在 Windows 8 应用中加载和绑定此类数据的最佳方式是什么?

感谢您提供的一切信息、直接答复、有用的链接或有关 Windows 8 中数据加载和绑定的视频...

【问题讨论】:

    标签: windows-8 windows-runtime winrt-xaml


    【解决方案1】:

    您可以在商店应用中使用资源,这里是示例:

    public static string GetXmlContentsFromResource(Assembly asm, string dataName)
    {
      string contents = "";
    
      Stream stream = asm.GetManifestResourceStream(asm.GetName().Name + "." + dataName);
      using (StreamReader reader = new StreamReader(stream))
      {
        contents = reader.ReadToEnd();
      }
      return contents;
    }
    

    您应该将 XML 文件添加到解决方案并将其标记为“嵌入式资源”,如果您将 XML 文件放在子目录中,例如如果文件夹名为 Data 并且 xml 文件是 Data1.xml 那么您应该将参数 dataName 发送到上面像“data.Data1.xml”这样的方法。

    对于数据绑定,最好的方法是将 XML 反序列化为反映 XML 内容的对象或对象列表。

    【讨论】:

    • 谢谢,这对我有用,我直接将 XmlSerializer.Deserialize 方法与 Stream 一起使用。无论如何我都会查看 chue x 的链接,因为我认为异步操作对我未来的编程很重要。
    【解决方案2】:

    使用 Windows 8 应用商店应用传送此类数据的最佳方式是什么?只需将它们放在资产文件夹中?

    是的,将它们放在您的资产文件夹中。请务必将构建属性设置为“内容”+“复制到输出”。完成此操作后,您可以使用以下网址从您的应用程序访问它们:ms-appx:///Assets/myxmlfile.xml

    例如:

    StorageFile xmlFile = await StorageFile.GetFileFromApplicationUriAsync
        (new Uri("ms-appx:///Assets/myxmlfile.xml"));
    

    上面为您提供了一个文件对象,您可以使用它来读取您的文件。显然,由于您正在从Assets 文件夹中读取,因此您的文件将是只读的。

    在 Windows 8 应用中加载和绑定此类数据的最佳方式是什么?

    至于数据绑定,这可能有点太大而无法在一个答案中涵盖。你可能想看看这个Windows 8 Data Binding Sample

    【讨论】:

    • 您好,感谢您的快速答复。我无法在加载数据的方法中使用 await,因此我在 GetFileFromApplicationUriAsync 调用中添加了 .GetResults()。但它引发了一个异常“在意外的时间调用了一个方法”,我不确定这是因为我的改变还是一般问题......
    • @Hinek - 您无法拨打await 的原因是什么?如果您不熟悉 asyncawait 的工作原理,这是一个非常广泛的话题。请参阅此链接开始:msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
    • 很多时候人们认为他们不能使用异步调用,因为它不适用于他们现有的代码。问题是这些 Async 调用中的大多数在同一线程上都有延续,因此调用 GetResult 会导致死锁。异步具有传染性,通常需要更改大量代码,但它也是唯一的选择。
    • 当我使用 await 编译器抛出一个错误,再加上应用程序在加载此数据之前无法真正做任何事情(这不应该花费太长时间,在我的手机设备上是 1-2 秒...在平板电脑或 PC 上不应该更长)...所以我看不到在这一点上异步的好处。但是我会查看您的链接,我知道异步操作很重要。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2012-12-03
    • 2012-08-14
    相关资源
    最近更新 更多