Экран-заставка Xamarin PCL, содержащий вызов веб-службы

#xamarin #xamarin.forms

#xamarin #xamarin.forms

Вопрос:

Я хотел бы иметь страницу содержимого Xamarin PCL, которая отображает приветственное сообщение, а затем загружает данные из веб-службы. У меня работает веб-служба, но проблема в том, что в следующем примере ничего не отображается, пока для работы требуется время.

Какова общая стратегия для отображения заставки типа ожидания, ожидания завершения длительной задачи, а затем продолжения работы с остальной частью приложения (скажем, со страницей главного меню)?

Надеюсь, стратегия будет работать в проекте PCL, чтобы мне не приходилось пытаться писать версии для iOS и Android? Я пытался поместить код в различные методы переопределения, но, похоже, ничего не работает. Заранее спасибо за любые советы.

 // The following is called from the "App : Application" class.
public class SplashScreen : ContentPage
{
    public SplashScreen()
    {
        Label lblWelcome = new Label { Text = "Hello. Please wait..." };

        Content = new StackLayout
        {
            Children = { lblWelcome }
        }

        //TODO: Have the device display the above content before the following continues...

        CallWebServiceToLoadParameters();

        //TODO: Move on to display the Main Menu
    }
}
  

Комментарии:

1. перемещение CallWebServiceToLoadParameters(); в onApearing() должно сработать.

2. Что, похоже, не работает? Он зависает, выдает ошибку? Достигает ли он серверной части вообще?

3. вам нужно отделить свой код, например, содержимое от CallWebServiceToLoadParameters(); перемещение его в OnAppearing() может не сработать, потому что, если вы это сделаете — CallWebServiceToLoadParameters() завершится до того, как вы покажете свой экран-заставку. Вы можете попытаться запустить CallWeb из другого потока, а когда он завершится — перейти на новую страницу содержимого. Но я бы рекомендовал в любом случае взглянуть на реализацию собственных всплесков.

4. Привет @GeraldVersluis. Как я уже упоминал в вопросе, вызов веб-службы работает просто отлично. Проблема в том, что во время работы на экране-заставке ничего не отображается. Я начинаю понимать, что в заставке Xamarin (PCL) есть нечто большее, чем я надеялся. Я смотрю на codeworks.it/blog/?p=294 и developer.xamarin.com/Guides/Android/User_Interface /…

5. Привет @Yogesh. Я попробовал трюк с OnAppearing(), но он не сработал.

Ответ №1:

Это может помочь:

 public class SplashScreen : ContentPage
{
    public SplashScreen()
    {
        Label lblWelcome = new Label { Text = "Hello. Please wait..." };

        Content = new StackLayout
        {
            Children = { lblWelcome }
        }

        Device.BeginInvokeOnMainThread(async () => {
            //If awaitable
            var response = await CallWebServiceToLoadParameters();

            if(response{
                App.Current.MainPage = //Your main page.
            }
        });

    }
}
  

Немного уродливый, правильный путь будет с ViewModel для каждой страницы.