Contrôler le flux dans une application Windows
-
30-10-2019 - |
Question
Mon application a une classe singleton appelée CycleManager. J'ai créé une classe scellée à cet effet comme celle-ci
public sealed class CycleManager
{
public static readonly CycleManager instance = new CycleManager();
public CycleManager()
{
//ReadFromIsolatedStorage();
}
public static CycleManager Instance
{
get
{
return instance;
}
}
}
Et l'application.xaml.cs a le code suivant
public App()
{
UnhandledException += Application_UnhandledException;
InitializeComponent();
InitializePhoneApplication();
RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating); if (System.Diagnostics.Debugger.IsAttached)
{
Application.Current.Host.Settings.EnableFrameRateCounter = true;
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
}
}
J'ai utilisé le rootframe_navigating () pour vérifier si je dois aller sur la page principale ou la page de connexion.
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
//throw new NotImplementedException();
if (e.Uri.ToString().Contains("/RootPage.xaml") != true)
return;
CycleManager pCycMan = CycleManager.instance;
e.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(delegate
{
if (pCycMan.GetPasswordEnabled())
RootFrame.Navigate(new Uri("/PasswordPage.xaml", UriKind.Relative));
else
RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
});
}
Je m'attendais à ce que l'instance CycleManager soit créée lorsqu'une instance est appelée à l'intérieur du rootframe_navigation ()
Mais le débogage m'a montré que jus après la constituteur app (), le flux de contrôle se déplace vers la classe du gestionnaire de cycle et après le constructeur CycleManager (), il se déplace vers le rootframe_navigation. !! Y a-t-il quelque chose qui ne va pas ou je l'ai mal compris?
La deuxième chose est que lors de l'exécution de CycleManager pCycMan = CycleManager.instance;
Je m'attendais à ce que le code suivant dans le cyclemanager soit appelé mais il ne l'est pas surprenant. Alors comment la propriété Singleton a-t-elle réussi? Ou chaque fois qu'un nouvel OBJ est créé?
public static CycleManager Instance
{
get
{
return instance;
}
}
Alfah
Pas de solution correcte