Windows Phone 7 Silverlight使用会话

Muh*_*han 1 c# silverlight session session-variables windows-phone-7

我正在创建一个Windows 7移动Silverlight项目.我使用Rest api进行身份验证,使用类认证.我得到一个身份验证令牌作为响应,并将其分配给类属性AuthToken,因为我需要在不同的地方使用它.有没有办法将此AuthToken存储在会话或其他任何内容中.因为我在wp7中没有找到任何会话示例.谢谢

the*_*ent 5

如果您想要临时会话存储(应用程序的生命周期,包括用户使用后退按钮返回到您的应用程序),那么您可以使用电话状态.电话状态类似于ASP.NET中的会话状态.它只是一个带有字符串键的(可序列化)对象的字典,并且不会在应用程序的启动时进行维护,但是当您的应用程序从后向堆栈导航到时,它会被恢复.

下面是一个用于恢复名为myObject的自定义对象的示例:

private CustomObject myObject;

protected override void OnNavigatedFrom(NavigationEventArgs args)
{
    //Save to State when leaving the page
    PhoneApplicationService.Current.State["myObject"] = myObject;
    base.OnNavigatedFrom(args);
}

protected override void OnNavigatedTo(NavigationEventArgs args)
{
    if (PhoneApplicationService.Current.State.ContainsKey("myObject"))
    {
        //Restore from State
        myObject = (CustomObject)PhoneApplicationService.Current.State["myObject"];
    }
    else
    {
        //No previous object, so perform initialization
        myObject = new myObject();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您需要在应用程序的所有实例中存储设置,请查看最适合的IsolatedStorageSettings.根据您的需求还有其他选择(Charles Petzold有一个免费的电子书,有一些很好的例子).


不确定为什么上面的代码不适合你,但另一种选择是使用使用IsolatedStorageSettings保存的app属性.这是一个例子:

在App.xaml.cs中:

    public bool VibrationOn { get; set; }

    private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        LoadSettings();
    }

    private void Application_Activated(object sender, ActivatedEventArgs e)
    {
        LoadSettings();
    }

    private void Application_Deactivated(object sender, DeactivatedEventArgs e)
    {
        SaveSettings();
    }

    private void Application_Closing(object sender, ClosingEventArgs e)
    {
        SaveSettings();
    }

    private void LoadSettings()
    {
        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;

        bool vo;
        if (settings.TryGetValue<bool>("VibrationOn", out vo))
            VibrationOn = vo;
        else
            VibrationOn = true;
    }

    private void SaveSettings()
    {
        IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
        settings["VibrationOn"] = VibrationOn;
    }
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下代码访问应用程序中任何位置的此属性:

    if (Application.Current.VibrationOn)
    {
        VibrateController.Default.Start(TimeSpan.FromMilliseconds(200));
    }
Run Code Online (Sandbox Code Playgroud)