App.xaml.cs クラスで認証を行いたいのですが、ユーザーがデータベースに存在する場合は、ユーザーをメンバー ページに誘導し、それ以外の場合はユーザーのパブリック ページを誘導します。rootframe ナビゲートの使用方法は知っていますが、問題は、Webervice 非同期メソッドが RootFrameNavigating の前に記述されていても、その前に実行されないことです。私のコードはここにあります
アプリコンストラクターで
dclient.GetUserByPhoneIdCompleted += new EventHandler<GetUserByPhoneIdCompletedEventArgs> (dclient_GetUserByPhoneIdCompleted);
dclient.GetUserByPhoneIdAsync(GetDeviceUniqueID());
if (getUserbyPhoneIdCompleted)
RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);
そして私の方法では
if (e.Uri.ToString().Contains("/MainPage.xaml") != true)
return;
e.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(delegate
{
if (userId == -1)
RootFrame.Navigate(new Uri(string.Format("/View/PublicPage.xaml"), UriKind.Relative));
else
RootFrame.Navigate(new Uri(string.Format("/View/WelcomePage.xaml"), UriKind.Relative));
});
そして、webserviceの私のメソッドでは整数が返され、そこでユーザーIDを取得します
このような
void dclient_GetUserByPhoneIdCompleted(object sender, GetUserByPhoneIdCompletedEventArgs e)
{
userId = e.Result;
getUserbyPhoneIdCompleted = true;
}