Мое приложение имеет одноэлементный класс CycleManager.Для этой цели я создал запечатанный класс, например,
public sealed class CycleManager
{
public static readonly CycleManager instance = new CycleManager();
public CycleManager()
{
//ReadFromIsolatedStorage();
}
public static CycleManager Instance
{
get
{
return instance;
}
}
}
. И файл App.xaml.cs имеет следующий код
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;
}
}
. Я использовал RootFrame_Navigating () для проверкимне нужно перейти на главную страницу или страницу входа в систему.
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));
});
}
Я ожидал, что экземпляр Cyclemanager будет создан при вызове экземпляра внутри RootFrame_Navigating ()
Но отладкапоказал мне, что после конструктора App () поток управления перемещается в класс диспетчера циклов, а после конструктора CycleManager () перемещается в RootFrame_Navigating.!!Что-то не так или я понял это неправильно?
Во-вторых, при выполнении CycleManager pCycMan = CycleManager.instance;
я ожидал, что вызывается следующий код в CycleManager, но на удивление это не так.Тогда как управляется свойство синглтона?или каждый раз, когда создается новый объект?
public static CycleManager Instance
{
get
{
return instance;
}
}
Алфа