2016-11-17 2 views
-1

Ich versuche, eine asynchrone Funktion aufrufen, aber wenn ich es versuche und es tut es hat die rote Linie darunter. Ich möchte die Funktion aufgerufen werden, wenn die Seite geöffnet wird, danke im Voraus.Wie rufe ich Async-Funktion 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()); 
     } 
    } 




} 

wie würde ich das nennen? Entschuldigung, ich bin neu in C# und Xamarin

+0

Dann legen Sie es in den Event-Handler für wenn die Seite geöffnet ist. Mach es nicht im Konstruktor. Wenn Sie dann müssen, können Sie 'Task.Run' verwenden, aber ich rate davon ab. – Nkosi

+0

Sie können async im Konstruktor nicht aufrufen, da der Konstruktor die Ausführung des Objekts beenden soll, wenn das Objekt erstellt wird. Tun Sie es in einer Event-Handler- oder Template-Methode. –

+0

Kein wirkliches Problem, aber es ist am besten 'async Task' anstelle von' async void' zu verwenden. Zusätzliche Informationen [auf der MSDN, von der StackOverflow-Regel Stephen Cleary] (https://msdn.microsoft.com/en-us/magazine/jj991977.aspx) – clarkitect

Antwort

0

Sie sollten Ihre asynchronen Anrufe in ContentPage.OnAppearing() machen. Das Ereignis OnAppearing() wird, wie der Name schon sagt, genau dann aufgerufen, wenn Ihre Seite angezeigt wird. Dies ist das erwartete Verhalten des Benutzers. Beachten Sie auch, dass ich mich verändern Ihre Check() Methode Task zurück, weil, wenn Sie in der Lage, die Methode Signatur zu bearbeiten, immer versuchen, den Rückgabetyp von Asynchron-Methoden void-Task zu ändern:

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()); 
     } 
    } 
} 

Technisch wenn Sie Dead Set, um nicht zu verwenden OnAppearing() Sie könnten die Check() vor dem Drücken Ihrer LoginPage tun, obwohl ohne mehr Code zu sehen, das würde scheinen, wie es den Zweck der LoginPage besiegen würde.

+0

Ich habe dies hinzugefügt, aber es wird immer noch lassen Sie mich die Prüfmethode von onappearing ausführen? –

+0

@TomJefferis Wie lässt es dich nicht? – hvaughan3

+0

In der On-Appearing-Methode der Check(); sagt, es braucht einen Parameter –

Verwandte Themen