zoukankan      html  css  js  c++  java
  • 二十、异步调用的问题

    问题描述:

    我们在SampleDataSource的构造函数中,将里边的示例代码全部删除,然后添加异步方法LoadFile,即

    public SampleDataSource()
    
    {
    
    LoadFile();
    
    },但是运行结果却是Group的数据被加载了,但是其中的数据项未被加载,也就是说数据不显示。
    原因
    这是典型的异步调用错误。原因也很简单,是因为SampleDataSource的构造函数是同步调用,不会等LoadFile结束后再返回,所以,当界面上显示数据时,显示的只是未加载完成的数据列表。
    解决方法:
    方法一:
    由于构造函数无法变成async调用方法,所以只能用另外的一个显式初始化函数来替代构造函数的作用,在数据显示之前,显式地调用该初始化函数。所以,我就直接将LoadFile作为这个初始化函数,为LoadFile增加public,static和async关键字。
    然后,我们打开GroupItemsPage.xaml.cs文件,找到LoadState方法。该方法用来设置当前视图的数据源,所以,我们在LoadState方法的顶部显式调用SampleDataSource.LoadFile方法。当然,我们会得到一个编译错误,因为LoadState方法也是一个同步调用函数,简单地为LoadState方法增加一个async的关键字就可以解决这个问题。
    方法二:
    public SampleDataSource()

    {

    _LoadFile();

    }
    private async Task _LoadFile()

    {

    await LoadFile();

    },
  • 相关阅读:
    变量
    数据类型
    常量
    synchronized&volatile
    类,方法,成员变量和局部变量的可用修饰符
    类及其组成所使用的常见修饰符
    四种权限修饰符
    import
    finally
    final
  • 原文地址:https://www.cnblogs.com/suinuaner/p/twenty.html
Copyright © 2011-2022 走看看