私はXamarin.Formsアプリケーションを持っています。最初のステップでは、アプリケーションのユーザーは単純なContentPageであるログインページにログインする必要があります。ユーザーが正常にログインすると、MasterDetailPageが表示されます。Xamarin/Xamarin.Forms - MasterDetailPageを初期化するときにデッドロックが発生する?
私の問題は、このコード行がデッドロックを生成することです。したがって、このコード行は決して終わらないでしょう。
_masterPage.Master = _mainMenuPage;
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;
}
任意のアイデア
ここでは、全体の機能はありますか?私にとっては非常に奇妙なようです。
'InitAsync'と' RefreshDataAsync'は何をしますか? –
現時点では何もありません。将来の仕事のためのただの空の方法。 SignInAsyncは問題なく終了したため、SignInAsync内のコードは問題ではないと思います。 – OPunktSchmidt
あなたが今必要でないものをコメントアウトし、何が起こるかを調べると、コードがハングする原因を正確に突き止めることができます。 –