Как справиться с задачей инициализации приложения в формах Xamarin? - PullRequest
0 голосов
/ 30 мая 2018

Я использую приложение Xamarin Forms.Мне нужно проверять каждый раз, когда код действителен или нет во время инициализации приложения.Я использую приведенный ниже код.Он отлично работает в первый раз.Но когда я нажимаю кнопку «Назад» и снова открываю приложение, полученное приложение падает.Получение ошибки NullReference.Как я могу справиться с этим при запуске приложения?Мой код:

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 голосов
/ 30 мая 2018

Попробуйте добавить else часть к if sitecode null

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();
}
0 голосов
/ 30 мая 2018

Ответ прост - вы не хотите обрабатывать задачи при инициализации приложения.«Задачи» означали потенциально длительные процедуры.Обычно используется для загрузки или обработки данных.Вы не хотите откладывать запуск своего приложения из-за этого, верно?Кроме того, в настоящее время нет способа пометить конструктор ключевым словом async.

Например, вы могли бы переместить Task в одно из событий жизненного цикла приложения, например OnStart().который может быть отмечен как async.Однако, почему бы не дать приложению успешно загрузиться, показать пользовательский интерфейс и чем заняться на фиктивной странице?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...