【发布时间】:2021-04-03 18:48:17
【问题描述】:
我正在使用Uno Platform 制作一个应用程序,该应用程序可以从游戏 (BeamNG.drive) 访问用户文档库中的特定文件夹。我希望应用程序读取此文件夹中的所有 mod 文件,以便能够在启动时对其进行编辑和显示给用户。我安装了 Nito.Mvvm.Async 包来帮助我将所有内容绑定到 UI。
这是从 Documents 文件夹加载 mod 文件的方法的一部分:
public static async Task<List<Mod>> GetModList()
{
StorageFolder documents = await KnownFolders.DocumentsLibrary.GetFolderAsync("BeamNG.drive");
IReadOnlyList<StorageFile> fileList = await documents.GetFilesAsync();
List<Mod> foundModsList = new();
foreach (StorageFile file in fileList)
{
//...
}
return foundModsList;
}
这是我的解决方案中 Shared 项目中 MainPage.xaml.cs 上的代码,基于来自 this answer 的代码
public NotifyTask<ObservableCollection<Mod>> ModsData { get; }
public MainPage()
{
InitializeComponent();
ModsData = NotifyTask.Create(InitModData());
}
private static async Task<ObservableCollection<Mod>> InitModData()
{
return new(await ModManager.GetModList());
}
GetModList() 方法被调用,但GetFolderAsync("BeamNG.drive") 方法永远不会返回,并且应用程序继续正常运行(不是 UI 冻结或任何事情)。如果我在该行中添加断点,Visual Studio 会正常停在那里。但是,如果我按“Step Over”,VS 不会继续使用该方法,而是跳到这一行...
return new(await ModManager.GetModList());
...然后这个:
ModsData = NotifyTask.Create(InitModData());
在任何使用await 的调用中使用ConfigureAwait(false) 没有任何帮助。我真的不确定发生了什么,我怀疑Nito.Mvvm.Async 可能与它有关(考虑到它的最后一次更新是在 2017 年)但我真的不确定。
【问题讨论】:
-
@Dai "从 C# 9.0 开始,构造函数调用表达式是目标类型的。也就是说,如果表达式的目标类型已知,则可以省略类型名称" (new operator)
标签: c# .net-core uwp async-await uno-platform