如何在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”方法读取多个文件的主要内容,如果未能解决你的问题,请参考以下文章