如何在UWP中使用“getfileasync”方法读取多个文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在UWP中使用“getfileasync”方法读取多个文件相关的知识,希望对你有一定的参考价值。

我正在开发一个UWP应用程序,我需要在一些Json文件中读取assests文件夹中的数据用法。

然后我创建了这个方法,

public async Task<StorageFile> access(string filename)
    {
        var storageFile = await Package.Current.InstalledLocation.GetFileAsync(@"Assets\data\" + filename);
        return storageFile;
    }

public async Task<string> read(StorageFile storagefile)
    {
        string content = await FileIO.ReadTextAsync(storagefile);
        return content;
    }

因此,我在mainpage中使用此方法首先读取文件,

Task<StorageFile> stream1_1 = access("mycourse.json");
Task<string> stream1_2 = read(stream1_1.Result);
string mycourseinfo = stream1_2.Result;

当我尝试在文本块中显示它时,它会成功

mytextblock.text = mycourseinfo;

然后我添加了另一个来读取第二个文件

Task<StorageFile> stream2_1 = access("class_info.json");
Task<string> stream2_2 = read(stream2_1.Result);
string allclassinfo = stream2_2.Result;

然后问题出来了,应用程序将无法编译也显示没有错误消息,我认为这是一个僵局.....

我试着单独阅读第二个文件并再次成功!那我怎么能解决这个问题!!我需要阅读三个文件!

答案

你只需要在方法后面添加等待,因为它们正在返回任务。当我添加等待它后面它将完成执行该行,并且只有在完成它将移动到下一个代码行,你的死锁正在创建,因为你没有使用等待。使用以下代码来读取每个文件。

StorageFile stream1_1 = await access("mycourse.json");
string stream1_2 = read(stream1_1);
string mycourseinfo = stream1_2;

还注意到使用await时返回类型不应该是Task。

为了避免使构造函数异步,您必须使用Loaded事件。

因此,在页面的构造函数中添加以下加载的事件,如下所示:

Loaded += async (s, e) =>
{
    //do any awaited stuff here
};

以上是关于如何在UWP中使用“getfileasync”方法读取多个文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UWP 类中仅访问一种特定方法?

将 Document.getFileAsync 数据转换为 FormData 用于 Office 文件上传

如何在 UWP 后台任务中使用 XAML UI 元素?

如何在 UWP 中实例化具有构造函数的页面?

如何在UWP中数据绑定到RichEditBox的纯文本值?

如何减少在 UWP 中使用 nVidia 的 nvwgf2umx.dll?