当BackgroundAudioPlayer';的实例处于活动状态
本文关键字:实例 活动状态 BackgroundAudioPlayer | 更新日期: 2023-09-27 18:24:05
我的解决方案中有两个项目。比方说项目A和项目B。
项目A
它是主要项目,有设置。我有一个复选框,让用户可以选择"重复"曲目。该项目还可以访问项目B的公共实例。
项目B
它是BackgroundAudioAgent,有自己的设置。此项目无权访问项目A设置。因此,在项目A中,我需要访问项目B的设置并将其保存在那里。这样,当启用"重复"时,代理程序将重新开始播放。
问题
当BackgroundAudioPlayer的实例正在运行时,我无法保存设置(换句话说,设置已保存,但不会产生任何影响)。我总是必须关闭实例,当我这样做时,设置可以更改。
问题
-
做我想做的事情最有效的方法是什么?
-
如何在不关闭BackgroundAudioPlayer实例的情况下将设置保存在IsolatedStorage中?(因为我不想打断正在播放的任何曲目)。
代码:我要做什么来保存设置。
public bool SettingAudioRepeat
{
get
{
return GetValueOrDefault<bool>(SettingAudioRepeatKeyName, SettingAudioRepeatDefault);
}
set
{
if (AddOrUpdateValue(SettingAudioRepeatKeyName, value))
{
bool resumePlay = false;
try
{
if (BackgroundAudioPlayer.Instance.PlayerState != PlayState.Shutdown)
{
BackgroundAudioPlayer.Instance.Close();
resumePlay = true;
}
}
catch { }
TaskEx.Delay(300);
IQR_Settings iqrSet = new IQR_Settings();
iqrSet.SettingAudioRepeat = value;
iqrSet.Save(); //Saving the settings for Project B
Save(); //Saving the settings for Project A
try
{
if (resumePlay)
BackgroundAudioPlayer.Instance.Play(); //It starts all from scracth
}
catch { }
}
}
public T GetValueOrDefault<T>(string Key, T defaultValue)
{
T value;
// If the key exists, retrieve the value.
if (settings.Contains(Key))
{
value = (T)settings[Key];
}
// Otherwise, use the default value.
else
{
value = defaultValue;
}
return value;
}
代码:我只是想做什么。
public bool SettingAudioRepeat
{
get
{
return GetValueOrDefault<bool>(SettingAudioRepeatKeyName, SettingAudioRepeatDefault);
}
set
{
if (AddOrUpdateValue(SettingAudioRepeatKeyName, value))
{
IQR_Settings iqrSet = new IQR_Settings();
iqrSet.SettingAudioRepeat = value;
iqrSet.Save(); //Saving the settings for Project B
Save(); //Saving the settings for Project A
}
}
我同意背景音频是一个乳房。无论何时使用任何后台代理,都不能依赖ApplicationSettings进行同步。如果你想从UI(应用程序)和后台(音频代理)保存和访问设置,你应该保存一个文件。您可以使用Json.Net序列化设置,并将文件保存到已知位置。这是的样本
// From background agent
var settings = Settings.Load();
if(settings.Foo)
{
// do something
}
这是一个设置文件示例。这些设置需要定期保存。
public class Settings
{
private const string FileName = "shared/settings.json";
private Settings() { }
public bool Foo { get; set; }
public int Bar { get; set; }
public static Settings Load()
{
var storage = IsolatedStorageFile.GetUserStoreForApplication();
if (storage.FileExists(FileName) == false) return new Settings();
using (var stream = storage.OpenFile(FileName, FileMode.Open, FileAccess.Read))
{
using (var reader = new StreamReader(stream))
{
string json = reader.ReadToEnd();
if (string.IsNullOrEmpty(json) == false)
{
return JsonConvert.DeserializeObject<Settings>(json);
}
}
}
return new Settings();
}
public void Save()
{
var storage = IsolatedStorageFile.GetUserStoreForApplication();
if(storage.FileExists(FileName)) storage.DeleteFile(FileName);
using (var fileStream = storage.CreateFile(FileName))
{
//Write the data
using (var isoFileWriter = new StreamWriter(fileStream))
{
var json = JsonConvert.SerializeObject(this);
isoFileWriter.WriteLine(json);
}
}
}
}
我个人有一个FileStorage类,用于保存/加载数据。我到处都用它。它就在这里(它确实使用Mutex来阻止后台代理和应用程序访问该文件)。您可以在此处找到FileStorage类。