博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二十章:异步和文件I/O.(十三)
阅读量:6981 次
发布时间:2019-06-27

本文共 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。

这是在三个平台上运行的程序:2018_12_21_104040
大家要是喜欢,支持一下,打开你的支付宝,搜索栏输入“9654711”,领红包你赚我也赚。

转载地址:http://yznpl.baihongyu.com/

你可能感兴趣的文章
使用logrotate实现日志轮训压缩
查看>>
centos下解决nginx 无法连接gitlab socket
查看>>
What is Citrix X1
查看>>
华为OSPF配置
查看>>
Win8 Metro(C#)数字图像处理--2.63图像指数增强
查看>>
Expect-自动化交互
查看>>
SCCM 2012 SP1系列(一)先决条件准备-1
查看>>
shell 逻辑运算符、逻辑表达式详解
查看>>
Linux下安装jboss(续集)
查看>>
双硬盘双系统启动
查看>>
【NetApp】SVM管理员如何使用system manager GUI界面管理SVM
查看>>
office常用的快捷键
查看>>
JavaScript语法详解(一)
查看>>
zimbra mailbox 备份与恢复
查看>>
【18】Python半成品购物车
查看>>
RedHat Linux KVM安装配置
查看>>
01 jquery easyui 入门示例
查看>>
oracle rac 扩展磁盘采坑记录
查看>>
Deprecated:function eregi() is deprecated in /usr/local/apache/libraries/lib_lang.php on line 8
查看>>
2.shell前基础知识
查看>>