如何跨库共享时将数据保存在静态变量中?

时间:2014-05-29 07:25:27

标签: c# windows-phone-8 static portable-class-library class-library

我有一个主要应用程序(确切地说是Windows Phone)。它引用了我创建的另一个类库。我在这个类库中创建了一个静态变量,并且正在从主应用程序中更改这些变量。从主应用程序访问时正确显示变量值,但是当我从类库本身访问相同的变量时,它显示不同的值。以下是我的代码。

My class library中的一个类:

public class PlayerQueue
    {
        public static bool LoopStatus;

        public static PlayerQueueTrack GetNextSong(String audioTrackId)
        {
            if (LoopStatus)
                return audioTracks[audioTrackId];
        }
    }

在我的Windows Phone应用程序中点击方法:

 private void loopButton_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
    {
        PlayerQueue.LoopStatus = true;
    }

在手机应用程序中执行tap方法后,如果从类库中调用GetNextSong()方法,则LoopStatus显示为false,即使它设置为true。

因此,从Windows Phone应用程序访问PlayerQueue.LoopStatus时的值不同,从包含PlayerQueue.LoopStatus的类库访问时PlayerQueue.LoopStatus给出的值不同。

有谁能告诉我如何在数据库和应用程序中保存数据?

编辑: 在类库中添加类,从中进行GetNextSong()调用

public class AudioPlayer : AudioPlayerAgent
{
    private static volatile bool _classInitialized;

public AudioPlayer()
{
    if (!_classInitialized)
    {
        _classInitialized = true;
        // Subscribe to the managed exception handler
        Deployment.Current.Dispatcher.BeginInvoke(delegate
        {
            Application.Current.UnhandledException += AudioPlayer_UnhandledException;
        });
    }
}

protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
{
    PlayerQueueTrack playerTrack = PlayerQueue.GetNextSong(id);
}

}

1 个答案:

答案 0 :(得分:2)

静态值在应用程序域中保留。只要您的应用程序正在运行且未创建新的应用程序域,它将保持不变。或者另一段代码正在改变它。

Windows Phone 8有点复杂,因为事件图块和应用程序往往在不同的应用程序域中运行:

Static variable value different in background agent

如果事件切片和后台进程之间有静态值,则最后剩下的选项是将其存储到持久数据存储/隔离存储中。