当我的应用程序启动时,如何在我的Xamarin表单中调用此异步方法?

Pur*_*ome 8 c# asynchronous async-await xamarin.forms

当我的应用程序首次启动时,我需要加载一些以前保存的数据.如果它存在 - >然后转到TabbedPage页面.否则,登录页面.

我不确定如何在应用程序的ctor中调用我的异步方法,甚至在另一种方法中?

我怎样才能做到这一点?

这是我的代码..

namespace Foo
{
    public class App : Application
    {
        public App()
        {
            Page page;

            LoadStorageDataAsync(); // TODO: HALP!

            if (Account != null)
            {
                // Lets show the dashboard.
                page = new DashboardPage();
            }
            else
            {
                // We need to login to figure out who we are.
                page = CreateAuthenticationPage();
            }

            MainPage = page;
        }

  ... snip ...
}
Run Code Online (Sandbox Code Playgroud)

那为什么是LoadStorageDataAsync异步?因为它使用的是库PCLStorage而且都是异步的.

有人可以帮忙吗?

Yuv*_*kov 10

就文档而言,Application.OnStart您可以覆盖以下事件:

应用程序开发人员覆盖此方法以在应用程序启动时执行操作

您可以async在那里执行您可以实际等待的方法:

public override async void OnStart()
{
    await LoadStorageDataAsync();
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ary 5

退后一步,考虑一下UI的工作原理.当您的应用程序最初显示时,框架会构建您的ViewModel和View,然后它会立即(尽快)显示.这是一个不适合网络活动的地方.

相反,您应该做的是启动异步操作,然后(同步)加载并显示"加载"页面.异步操作完成后,您可以转换到其他页面(如果用户没有网络访问权限,则转换为"错误"页面).

我不确定Xamarin Forms是否能够将数据绑定到页面对象,但如果是,那么我的NotifyTaskCompletion类型可能会有所帮助.