当App启动时,如何在Xamarin Forms中使用async方法?

时间:2017-12-15 13:02:01

标签: c# asynchronous xamarin xamarin.forms

我需要知道在App启动时如何在Xamarin Forms中使用async方法? 我需要根据条件显示首页。

public App()
        {
            InitializeComponent();

            if (SaveCredential.IpAddress == string.Empty || SaveCredential.PortNo == string.Empty)
            {
                MainPage = new NavigationPage(new Dhoni.IpDetail());
            }

            else if (SaveCredential.IpAddress != string.Empty && SaveCredential.PortNo != string.Empty)
            {
                if (await LoginPage.ConnectionCheck())

                {
                    if (SaveCredential.UserName != string.Empty && SaveCredential.Password != string.Empty)
                    {
                        if (await LoginPage.PasswordCheck(SaveCredential.UserName, SaveCredential.Password))
                        {
                            MainPage = new NavigationPage(new Dhoni.Dashboard());
                        }
                        else
                        {
                            MainPage = new NavigationPage(new Dhoni.LoginPage());
                        }
                    }
                    else if (SaveCredential.UserName == string.Empty || SaveCredential.Password == string.Empty)
                    {
                        MainPage = new NavigationPage(new Dhoni.LoginPage());
                    }

                }
                else
                {
                    MainPage = new NavigationPage(new Dhoni.IpDetail());
                }
            }
        }

我在这些行中出错

  

if(等待LoginPage.ConnectionCheck())

     

if(等待   LoginPage.PasswordCheck(SaveCredential.UserName,SaveCredential.Password))

错误是

  

等待'运算符只能在异步方法中使用。考虑   使用' async'标记此方法修饰符并改变其回报   输入'任务'。

任何人都可以解决这个问题吗?

3 个答案:

答案 0 :(得分:3)

    protected async override void OnStart()
    {
        base.OnStart();

        // call your async method here
    }

答案 1 :(得分:0)

你不能在ctor中使用async / await,在msdn上读取async / await。

您有两个选项,可以覆盖OnStartOnResume(还有OnSleep)并将其设置为异步:

protected override async void OnStart() { //await ... }

或者在App.xaml.cs的ctor中设置App.Current.MainPage,然后等待页面override asnyc void OnAppearing()中的逻辑。

答案 2 :(得分:0)

如果真的需要这样做(但我建议不要这样做):

YourMethodAsync.GetAwaiter().GetResult();