Windows phone 7 控制windows应用程序中的流

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

我的应用程序有一个名为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));
        });
    }
我原以为在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;