2016-10-18 18 views
2

ウェルカムメッセージを表示してからWebサービスからデータをロードするXamarin PCL ContentPageが必要です。 Webサービスは動作していますが、問題は次の例では動作するまでに何も表示されないことです。Webサービスコールを含むXamarin PCLスプラッシュ画面

待ち時間タイプのスプラッシュページを表示し、長時間実行されるタスクが完了するのを待ってから、残りのアプリケーション(メインメニューページなど)を続けるという一般的な戦略は何ですか?

iOSとAndroidのバージョンを試してみる必要がないように、この戦略はPCLプロジェクトでうまくいくと思いますか?私はさまざまなオーバーライドメソッドでコードを配置しようとしましたが、何も動作していないようです。アドバイスを事前に感謝します。

// 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 
    } 
} 
+0

CallWebServiceToLoadParameters(); onApearing()はそのトリックを行うべきです。 – Yogesh

+0

何が問題ないのですか?それはハングアップ、あなたにエラーを与えるか?それはまったくバックエンドに達していますか? –

+1

あなたのコードを分離する必要があります。例えば、CallWebServiceToLoadParameters()からのコンテンツです。それをonAppearing()に移動すると動作しないかもしれません。なぜならCallWebServiceToLoadParameters()はスプラッシュ画面を表示する前に終了するからです。別のスレッドからCallWebを起動しようとする可能性があります。終了したら、新しいコンテンツページに移動します。しかし、とにかくネイティブのはねを実装することを検討することをお勧めします。 –

答えて

3

これはトリックを行うことがあります。

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にになります。

関連する問題