Flusso di controllo in un'app Windows
-
30-10-2019 - |
Domanda
La mia app ha una classe singleton chiamata CycleManager. Ho creato una classe sigillata per questo scopo come questa
public sealed class CycleManager
{
public static readonly CycleManager instance = new CycleManager();
public CycleManager()
{
//ReadFromIsolatedStorage();
}
public static CycleManager Instance
{
get
{
return instance;
}
}
}
E App.xaml.cs ha il seguente codice
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;
}
}
Ho usato rootFrame_navigating () per verificare se ho bisogno di andare alla pagina principale o alla pagina di accesso.
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));
});
}
Mi aspettavo che l'istanza CycleManager fosse creata quando un'istanza viene chiamata all'interno di rootFrame_navigating ()
Ma il debug mi ha mostrato che JUS dopo il componente di app (), il flusso di controllo si sposta sulla classe del gestore del ciclo e dopo il costruttore CycleManager () si sposta su rootFrame_navigating. !! C'è qualcosa che non va o l'ho capito sbagliato?
La seconda cosa è che all'esecuzione di CycleManager pCycMan = CycleManager.instance;
Mi aspettavo che il seguente codice nel ciclomanager fosse chiamato, ma sorprendentemente non lo è. Allora come è gestita la proprietà Singleton? O ogni volta che viene creato un nuovo OBJ?
public static CycleManager Instance
{
get
{
return instance;
}
}
Alfah
Nessuna soluzione corretta