2017-04-13 4 views
0

Ich habe eine Xamarin.Forms App. Im ersten Schritt muss sich der Benutzer der App auf einer Login-Seite anmelden, die eine einfache ContentPage ist. Nachdem der Benutzer sich erfolgreich angemeldet hat, sollte er eine MasterDetailPage sehen.Xamarin/Xamarin.Forms - Deadlock beim Initialisieren von MasterDetailPage?

Mein Problem ist jetzt, dass diese Codezeile einen Deadlock erzeugt. Also wird diese Codezeile niemals enden.

_masterPage.Master = _mainMenuPage;

Hier ist die ganze Funktion:

private void SignInButtonClicked(string username, string password) 
    { 
     SignInAsync(username, password).ContinueWith(task => 
     { 
      if (task.Result) 
      { 
       _signInPage.StopActivityIndicator(); 

       _masterPage.Master = _mainMenuPage; 
       _masterPage.Detail = _masterNavigationPage; 
       MainPage = _masterPage; 
      } 

     }, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion, System.Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext()); 
    } 

SignInAsync:

private async System.Threading.Tasks.Task<bool> SignInAsync(string username, string password) 
    { 
     bool signedIn = true; 

     //ToDo SignIn logic 

     if (signedIn) 
     { 
      _mainMenuPage = new CPM.Arda.Mobile.Freelancer.Ui.Pages.MainMenu(this); 
      await _mainMenuPage.InitAsync(); 
      await _mainMenuPage.RefreshDataAsync(); 

      _mainMenuPage.MainMenuItemSelectedEvent += MainMenuItemSelected; 

      CPM.Arda.Mobile.Freelancer.Ui.Pages.General.Overview overviewPage = new CPM.Arda.Mobile.Freelancer.Ui.Pages.General.Overview(this); 
      await overviewPage.InitAsync(); 
      await overviewPage.RefreshDataAsync(); 

      _masterNavigationPage = new Xamarin.Forms.NavigationPage(overviewPage); 

      _masterPage = new CPM.Arda.Mobile.Freelancer.Ui.Pages.Master(this); 
      await _masterPage.InitAsync(); 
      await _masterPage.RefreshDataAsync(); 
     } 

     return signedIn; 
    } 

Irgendwelche Ideen? Es kommt mir sehr seltsam vor.

+0

Was machen 'InitAsync' und' RefreshDataAsync'? –

+0

Im Moment nichts. Nur leere Methoden für zukünftige Arbeit. Ich denke, der Code in SignInAsync ist nicht das Problem, da SignInAsync ohne Probleme beendet wurde und ein ContinueWith aufgerufen wird. – OPunktSchmidt

+0

Versuchen Sie, Dinge zu kommentieren, die Sie gerade nicht benötigen, und sehen Sie, was passiert. So können Sie besser erkennen, was den Code zum Aufhängen bringt. –

Antwort

1

Ich fand die Lösung. Ich habe vergessen, die Eigenschaft Titel auf CPM.Arda.Mobile.Freelancer.Ui.Pages.MainMenu (die MasterPage von der MasterDetailPage) zu setzen. Ein häufiger Fehler bei Xamarin.Forms.

Aber ohne Ausnahme ist es sehr schwer zu finden. Xamarin ist manchmal nicht hilfreich:/

+0

Dies ist ein bekanntes Problem: https://bugzilla.xamarin.com/show_bug .cgi? id = 54477 – Frankie

Verwandte Themen