2016-11-17 26 views
-1

私は非同期関数を呼び出そうとしていますが、試してみると、その下に赤い線があります。私は、ページが開かれたときに関数が呼び出されるようにしておきたいと思います。私は非同期関数xamarinを呼び出す方法

public partial class Home : ContentPage 
{ 


    public class GoogleProfile 
    { 
     public string Id { get; set;} 

    } 


    public Home() 
    { 
     InitializeComponent(); 
    } 


    protected override async void OnAppearing() 
    { 
     await Check(/*What do i put in here*/); 

    } 

    public async Task Check(GoogleProfile googleprofile) 
    { 


     if (String.IsNullOrEmpty(googleprofile.Id)) 
     { 

     } 
     else { 
      await Navigation.PushAsync(new LoginPage()); 
     } 
    } 




} 

どうすればいいですか?申し訳ありません。C#とxamarinの新機能

+0

次に、ページが開いているときのイベントハンドラに配置します。コンストラクタでそれをしないでください。あなたがしなければならない場合は、 'Task.Run'を使用することができますが、私はそれに対して助言します。 – Nkosi

+0

コンストラクターでasyncを呼び出すことはできません。オブジェクトが構築されると、コンストラクターは実行を終了する必要があるからです。イベントハンドラまたはテンプレートメソッドで行います。 –

+0

実際の問題ではありませんが、 'async void'の代わりに' async Task'を使うのが最善です。追加情報[MSDNのStackOverflowの通常のStephen Cleary](https://msdn.microsoft.com/en-us/magazine/jj991977.aspx) – clarkitect

答えて

0

ContentPage.OnAppearing()で非同期の呼び出しを行う必要があります。あなたのページが表示されているときには、名前のとおり、OnAppearing()イベントが呼び出されます。これはユーザーが期待する動作です。

public partial class LoginPage : ContentPage { 

    public LoginPage() { 
     InitializeComponent(); 
    } 

    protected override async void OnAppearing() { 
     await Check(/* Add code here to get your GoogleProfile object */); 
    } 

    public async Task Check(GoogleProfile googleprofile) { 
     var ID = googleprofile.Id; 

     if (string.IsNullOrEmpty(ID)) { 
      return; 
     } else { 
      await Navigation.PushAsync(new Home()); 
     } 
    } 
} 

技術的には、あなたがしている場合:また、あなたがメソッドのシグネチャを編集することができれば、ので、私はいつもTaskvoidから非同期メソッドの戻り値の型を変更しようと、Taskを返すために、あなたのCheck()方法を変更したことに注意してくださいデッドセットはOnAppearing()を使用しないでLoginPageをプッシュする前にCheck()を実行することができますが、より多くのコードは表示されませんが、LoginPageの目的を破るように見えます。

+0

Iveはこれを追加しましたが、私はonappearingからcheckメソッドを実行させませんでしたか? –

+0

@TomJefferisどのようにあなたをさせていないですか? – hvaughan3

+0

onappearingメソッドでcheck();パラメータが必要だと言っています –

関連する問題