本文共 2625 字,大约阅读时间需要 8 分钟。
通过该开销,可以开始实际编写应用程序。 TextFileAsyncPage的XAML文件与TextFileTryoutPage相同,但必须将代码隐藏文件设置为使用异步文件I / O方法。 必须在此处捕获文件I / O函数中可能发生的任何异常,这意味着任何可以抛出异常的方法必须与await运算符一起位于try块中:
public partial class TextFileAsyncPage : ContentPage{ FileHelper fileHelper = new FileHelper(); public TextFileAsyncPage() { InitializeComponent(); RefreshListView(); } async void OnSaveButtonClicked(object sender, EventArgs args) { saveButton.IsEnabled = false; string filename = filenameEntry.Text; if (await fileHelper.ExistsAsync(filename)) { bool okResponse = await DisplayAlert("TextFileTryout", "File " + filename + " already exists. Replace it?", "Yes", "No"); if (!okResponse) return; } string errorMessage = null; try { await fileHelper.WriteTextAsync(filenameEntry.Text, fileEditor.Text); } catch (Exception exc) { errorMessage = exc.Message; } if (errorMessage == null) { filenameEntry.Text = ""; fileEditor.Text = ""; RefreshListView(); } else { await DisplayAlert("TextFileTryout", errorMessage, "OK"); } saveButton.IsEnabled = true; } async void OnFileListViewItemSelected(object sender, SelectedItemChangedEventArgs args) { if (args.SelectedItem == null) return; string filename = (string)args.SelectedItem; string errorMessage = null; try { fileEditor.Text = await fileHelper.ReadTextAsync((string)args.SelectedItem); filenameEntry.Text = filename; } catch (Exception exc) { errorMessage = exc.Message; } if (errorMessage != null) { await DisplayAlert("TextFileTryout", errorMessage, "OK"); } } async void OnDeleteMenuItemClicked(object sender, EventArgs args) { string filename = (string)((MenuItem)sender).BindingContext; await fileHelper.DeleteAsync(filename); RefreshListView(); } async void RefreshListView() { fileListView.ItemsSource = await fileHelper.GetFilesAsync(); fileListView.SelectedItem = null; }}
结果是,此代码的结构非常类似于使用同步文件I / O函数的先前代码。 但是,一个区别是OnSaveButtonClicked方法在开始处理时禁用“保存”按钮,然后在完成所有操作后重新启用它。 这只是为了防止多次按下Save按钮,这可能导致多次重复调用FileIO.WriteFileAsync。
这是在三个平台上运行的程序:大家要是喜欢,支持一下,打开你的支付宝,搜索栏输入“9654711”,领红包你赚我也赚。转载地址:http://yznpl.baihongyu.com/