我想在UWP中创建一些打开文本文件的简单练习代码,然后立即在代码中添加简单的文本。如何在UWP中为FileOpenPicker等待异步方法?
public MainPage()
{
this.InitializeComponent();
OpenFile();
SaveFile();
}
public async void OpenFile()
{
FileOpenPicker picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.Desktop;
picker.FileTypeFilter.Add(".txt");
DataFile = await picker.PickSingleFileAsync();
if (DataFile == null) { return; }
}
public async void SaveFile()
{
await FileIO.AppendTextAsync(DataFile, "" + DateTime.Now + "\n");
}
private StorageFile DataFile { get; set; }
正如预期的那样,这个代码将返回一个错误,因为在SAVEFILE()方法中,由于SAVEFILE()的OpenFile(后立即运行),并且由于的OpenFile()还没有完成检索目标文件为SAVEFILE的其操作( )来使用。问题是,当我试图修改的OpenFile下面的代码,我收到一个AggregateException错误:
DataFile = picker.PickSingleFileAsync();
Task task = Task.Run(async() => DataFile = await picker.PickSingleFileAsync());
task.Wait();
我不知道,直到它完成检索目标文件,SAVEFILE之前,我如何能够阻挡的OpenFile()( )运行。
这可以通过在这个问题中的答案来解决:https://stackoverflow.com/questions/32084943/async-lock-not-allowed – Laith
异步撰写不佳,这是乌龟一路下来,这里的核心问题是最后的乌龟,构造函数不能是异步的。你只需要做相反的事情,*首先*要求一个文件名,*然后*创建类对象。它的名字是MainPage并不好,在显示任何用户界面之前不要立即在程序启动时要求用户输入。对话框需要一个窗口来保持。否则,程序通常会有一个File> Open命令。 –