Windows phone 7 控制windows应用程序中的流
我的应用程序有一个名为CycleManager的单例类。为此,我创建了一个密封类,如下所示Windows phone 7 控制windows应用程序中的流,windows-phone-7,navigation,singleton,app.xaml,Windows Phone 7,Navigation,Singleton,App.xaml,我的应用程序有一个名为CycleManager的单例类。为此,我创建了一个密封类,如下所示 public sealed class CycleManager { public static readonly CycleManager instance = new CycleManager(); public CycleManager() { //ReadFromIsolatedStorage(); } public static Cyc
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));
});
}
我原以为在RootFrame_Navigating()内调用实例时将创建Cyclemanager实例
但是调试告诉我,在App()构造函数之后,控制流移动到Cycle manager类,在CycleManager()构造函数之后,它移动到根框架!!有什么不对劲吗?还是我理解错了
第二件事是在执行
CycleManager pCycMan=CycleManager.instance时代码>我期望CycleManager中的以下代码被调用,但令人惊讶的是,它没有被调用。那么单例属性是如何管理的呢?或者每次创建新的obj时
public static CycleManager Instance
{
get
{
return instance;
}
}
阿尔法如果您查看
[…]静态字段初始值设定项在
第一次使用静态字段之前与实现相关的时间
那一类的
因此,断点的命中顺序与规范一致,换句话说,静态字段在运行时确定的某个时间初始化。然而,确切的时间并不详细。您不应该编写依赖于静态字段初始化顺序的代码
第二个问题是您正在访问字段,而不是属性instance
vs.instance
。您应该将静态字段设置为私有。您实际上并没有在RootFrame\u导航方法中访问get属性。您直接命中了静态字段(它被声明为公共)
我想您的意思是键入CycleManager.Instance
(带大写字母“I”)CycleManager-pCycMan=CycleManager.Instance
你是说CycleManager.Instance
?是的,我在这里犯了一个巨大的概念错误!!:D谢谢。。我已将实例声明为public,并且在其中的任何位置都可以作为CycleManager.instance而不是CycleManager.instance进行访问。谢谢:D我意识到我只是在阅读了你的博文:D后才访问一个“属性”。幸运的是,它被声明为公共静态,因此我可以在任何地方访问它!:D新手错误:D
public sealed class CycleManager
{
public static readonly CycleManager instance = new CycleManager();
CycleManager pCycMan = CycleManager.instance;