如何在Xamarin Forms中处理应用程序初始化任务?

时间:2018-05-30 05:44:27

标签: c# xamarin xamarin.forms

我正在使用Xamarin Forms应用。我需要在应用初始化时检查每次代码是否有效。我正在使用下面的代码。它第一次工作正常。但当我按下按钮并重新打开应用程序时,应用程序崩溃了。获取NullReference错误。如何在App启动时处理此问题? 我的代码是:

public  App()
    {
        InitializeComponent();
        try
        {
            if (string.IsNullOrEmpty(SettingClass.SiteCode) && string.IsNullOrEmpty(SettingClass.SiteId))
                MainPage = new LoadScreenPage();
            else
            {
                Task.Run(async () => { var sitecode = await SettingClass.DataServiceObj.GetSiteCodeInformation(SettingClass.SiteCode);                    

                if (sitecode != null)
                {
                    if (sitecode.Id != null)
                    {
                        MainPage mainPage = new MainPage();
                        mainPage.SelectedItem = mainPage.Children[1];
                        MainPage = mainPage;
                    }
                    else
                    {
                        MainPage = new LoadScreenPage();
                    }
                }
                }).Wait();
            }
        }
        catch (Exception ex)
        {
            Debug.Write(ex.Message.ToString());
        }
    }

这是对的。如果那么为什么我会收到错误? 如果没有正确的方法来处理这个,那么另一个选择是什么?

2 个答案:

答案 0 :(得分:0)

答案很简单 - 您不想在应用初始化时处理任务。 "任务"意味着可能是一个长期运行的程序。常用于下载或处理数据。你不想因为这个而推迟你的应用程序启动,对吧?除此之外,目前还没有办法用async关键字标记构造函数。

例如,您可以将Task移至应用程序的生命周期事件之一,例如OnStart(),可以标记为async。但是,为什么不让应用程序成功加载,向用户显示一些ui,而不是在虚拟页面中做任何你需要做的事情?

答案 1 :(得分:0)

尝试将else部分添加到if sitecode为空

if (sitecode != null)
{
    if (sitecode.Id != null)
    {
        MainPage mainPage = new MainPage();
        mainPage.SelectedItem = mainPage.Children[1];
        MainPage = mainPage;
    }
    else
    {
        MainPage = new LoadScreenPage();
    }
}
else
{
    MainPage = new LoadScreenPage();
}