如何在Windows8应用程序中使用ReadTextAsync(StorageFile file)同步获取返回值

2024-04-18

基本上,我的代码是一个非常简单的测试,用于在 Windows 8 风格的应用程序中写入和读取文件。这里,首先将字符串“Jessie”写入dataFile.txt,然后由程序读取它,以便更新xaml中Textblock的Text属性。

从msdn示例中,我知道WriteTextAsync和ReadTextAsync用于Windows 8编程中的dataFile对文件的访问。但是,测试结果是 WriteTextAsync 函数实际上可以工作,而 ReadTextAsync 则不能(我可以看到“Jessie”已写入 dataFile.txt 的真实 txt 文件,但变量 str 始终为 null)。

我在互联网上看到过类似的问题,但它们的答案对我来说都没有意义。许多答案提到问题可能是 ReadTextAsync 是一个异步函数,例如使用 Task 但他们的所有解决方案都不适用于我的代码。我的问题是如何使用 ReadTextAsync 同步获取返回值,或者是否有其他方法从 Windows8 应用程序中的 txt 文件读取数据,以便我可以同步更新 UI?

这是代码:

public sealed partial class MainPage : Page
{  
    Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;

    public MainPage()
    {
        this.InitializeComponent();

        Write();
        Read();
    }

    async void Write()
    {
        StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", Windows.Storage.
                  CreationCollisionOption.ReplaceExisting);

        await FileIO.WriteTextAsync(sampleFile, "Jessie");
    }

    async void Read()
    {
        try
        {      
            StorageFile sampleFile = await localFolder.GetFileAsync("dataFile.txt");
            string str = await FileIO.ReadTextAsync(sampleFile);

            Text.DataContext = new Test(str, 1);
        }
        catch (FileNotFoundException)
        {

        }
    }

    public class Test
    {
        public Test() { }

        public Test(string name, int age)
        {
            Name = name;
            Age = age;
        }

        public string Name { get; set; }
        public int Age { get; set; }

        // Overriding the ToString method
        public override string ToString()
        {
            return "Name: " + Name + "\r\nAge: " + Age;
        }
    }
}

非常感谢。


你应该有你的async方法返回Task而不是void只要有可能。你可能会发现我的异步/等待帖子简介 http://nitoprograms.blogspot.com/2012/02/async-and-await.html有帮助。我还有一篇博客文章异步构造函数 http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html.

构造函数不能是async,但您可以从构造函数启动异步进程:

public MainPage()
{
  this.InitializeComponent();
  Initialization = InitializeAsync();
}

private async Task InitializeAsync()
{
  await Write();
  await Read();
}

public Task Initialization { get; private set; }

async Task Write() { ... }
async Task Read() { ... }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Windows8应用程序中使用ReadTextAsync(StorageFile file)同步获取返回值 的相关文章

随机推荐

  • 在代码中使用通用 Int - 在 Core Data iOS 中使用 32 位或 64 位 Int?

    我正在用 swift 编写一个应用程序 通过苹果的核心数据保存其数据 在我的代码中 所有整数都被声明为 Int 因为这样更灵活 并且编译器会根据代码运行的设备调整这些整数 但是 当我想使用核心数据保存这些 Int 时 我必须选择 32 位或
  • 从ACRA 4.5升级到ACRA 4.6后编译错误

    我将我的应用程序使用的 ACRA 库从 4 5 0 到 4 6 0 但我收到 formKey 的编译错误 以前可以与 4 5 一起使用 以下是声明 ReportsCrashes formKey formUri socketTimeout 1
  • 根据另一个数组的数据对 numpy 数组进行排序

    我有两组数组data and result result包含相同的元素data但有一个额外的列并且按未排序的顺序 我想重新安排result数组 使其与中的行顺序相同data 同时在排序时将关联值与该行的其余部分一起放入最后一列 data n
  • 使用 Google Apps 脚本批量导入多个条目

    我知道有现有的代码可以构建可以上传多个文件 批量导入 的表单 如下所示使用 Google App 脚本将多个文件上传到 Google Drive https stackoverflow com questions 31126181 uplo
  • requireJS 与文件上传插件

    在requirejs中 我们可以通过以下方式设置js的名称 requirejs config paths jquery cdnjs cloudflare com ajax libs jquery 2 1 0 jquery min js 并将
  • 捕获 UserControl 中的 KeyDown 事件

    我有一个带有多个子控件的用户控件 我需要用户界面对按键做出反应 因此我决定将处理代码放入 MainControl KeyDown 事件中 但是 当我在应用程序中按下某个键时 该事件不会触发 我通过搜索引擎找到了一个依赖于使用 Windows
  • Ajax jquery 异步返回值

    我怎样才能让这段代码返回值无需冻结浏览器 当然 您可以用新方法重写它 function get char val merk var returnValue null ajax type POST async false url char i
  • js 异步/等待不工作

    我正在尝试了解 async await 以及如何使用它们 我正在遵循一些我见过的例子 我认为 但等待实际上并不是在等待ajax响应 这是代码 async function doAjaxGet ajaxurl const result awa
  • 在ggplot2中水平均匀分布点

    我想绘制计数的垂直箱线图 并将计数显示为点 覆盖在箱线图上 因为它们是离散值 所以会有多个点具有相同的值 为了在 ggplot2 中显示数据 我可以使用 geom jitter 来传播数据并获得稍微好一点的印象 但是抖动会破坏值 垂直分量
  • MySQL插入查询优化

    将大量行插入表中时 以下两种方法中哪一种会更快 查询方法一 逐条执行查询 INSERT INTO tbl user id name number VALUES NULL A 9999999999 INSERT INTO tbl user i
  • 更精确的 distance_of_time_in_words

    distance of time in words很棒 但有时不够精细 我需要一个能够以文字报告准确时间距离的函数 例如 上午 7 50 到上午 10 10 的距离应该是 2 小时 20 分钟 而不是 大约 2 小时 或其他什么distan
  • HighChart:多个图表的绘图线单击事件

    我正在使用 highchart 来实现一些向下钻取功能 我有一个功能可以让用户单击面积图并添加一条线 但后来我发现我的函数有一个错误 这些图表之间应该只有一条红线 但是当用户单击另一个图表时 第一个图表上的现有红线不会被删除 以下是我分享的
  • 如何将jupyter笔记本目录中的模块导入到较低目录的笔记本中? [复制]

    这个问题在这里已经有答案了 我使用 Jupyter Notebook 进行数据分析已经有一段时间了 我想在我的 jupyter 笔记本目录中开发一个模块 并能够将该新模块导入到笔记本中 我的jupyter笔记本文件目录可以表示如下 Jupy
  • dataframe.transpose() 没有转置

    我有一个数据框 df5 我想将列转置为行 反之亦然 DayofWeek Avg Shopping Trips Avg Profit 0 5 Saturday 1096 750000 185040 397500 1 6 Sunday 1489
  • Java 6 中的 xerces 序列化

    在 Java 6 中 整个 xerces XML 解析器 序列化器实现现在位于 Java 运行时 rt jar 中 这些包已移至 com sun 命名空间下 这使得它们无法在客户端代码中进行显式引用 使用解析器时这不是问题 解析器是通过 j
  • 为什么 Assert.AreEqual(T obj1, Tobj2) 对于相同的对象会失败

    我有一个包含多个结构的类 public class NavigationMenu public struct NavigationMenuItem public bool Enabled get set public int NumberO
  • Keras:实际使用的 GPU 内存量

    我正在使用带有 Tensorflow 后端的 Keras 并查看nvidia smi不足以了解当前网络架构需要多少内存 因为 Tensorflow 似乎只是分配所有可用内存 那么问题是如何找出真实的GPU内存使用情况 这可以使用时间轴来完成
  • java.lang.NoClassDefFoundError:freemarker/template/TemplateModelException

    尝试打造先进HTML报告使用extentReportsjar 但它抛出以下错误 java lang NoClassDefFoundError freemarker 模板 TemplateModelException Code public
  • 如何从另一个sh文件运行sh文件

    我有一个用于监视我的应用程序的 shell 脚本文件 该脚本将通过设置 cron 作业每 10 分钟执行一次 我想更多一些与监控相关的脚本文件应该与主文件一起执行 所以我想将我的脚本包含到主文件中 如何从主 sh 文件运行这些 sh 文件
  • 如何在Windows8应用程序中使用ReadTextAsync(StorageFile file)同步获取返回值

    基本上 我的代码是一个非常简单的测试 用于在 Windows 8 风格的应用程序中写入和读取文件 这里 首先将字符串 Jessie 写入dataFile txt 然后由程序读取它 以便更新xaml中Textblock的Text属性 从msd