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

Windows 8 如何在Windows8应用程序中使用ReadTextAsync(StorageFile文件)同步获取返回值,windows-8,Windows 8,基本上,我的代码是一个非常简单的测试,用于在Windows8风格的应用程序中写入和读取文件。在这里,字符串“Jessie”首先写入dataFile.txt,然后由程序读取,以便更新xaml中Textblock的Text属性 从msdn示例中,我知道WriteTextAsync和ReadTextAsync用于在Windows 8编程中访问文件的数据文件。但是,测试结果是WriteTextAsync函数实际上可以工作,而ReadTextAsync不能(我可以看到真实的txt文件,其中“Jessie”

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

从msdn示例中,我知道WriteTextAsync和ReadTextAsync用于在Windows 8编程中访问文件的数据文件。但是,测试结果是WriteTextAsync函数实际上可以工作,而ReadTextAsync不能(我可以看到真实的txt文件,其中“Jessie”已写入dataFile.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;
        }
    }
}

非常感谢。

如果可能,您应该让
异步
方法返回
任务
,而不是
无效
。你会发现我的建议很有帮助。我也有一篇关于的博客文章

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

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() { ... }

它起作用了!非常感谢你!现在我要学习它是如何工作的。谢谢!谢谢你!谢谢你!我在我的通用应用程序中尝试了相同的代码,它在Windows Phone中运行良好,但在Windows 8中不起作用。在Windows 8中,FileIO.ReadTextAsync返回“空字符串”,下面是我的问题。请帮帮我。