我正在尝试使用像这样的isolatedStoragesettings保存我保存的布尔值:
IsolatedStorageSettings.ApplicationSettings.TryGetValue(KEYSTRING, out myBoolValue);
但是只有在调试时才会出现此异常 IsolatedStorageFileStream上不允许操作。
当我使用(没有调试运行)Ctrl + F5它工作得很好。这里有什么想法吗?
答案 0 :(得分:3)
appears此异常可能是从多个线程(包括HTTP请求的完成处理程序)访问IsolatedStorageSettings.ApplicationSettings
的结果。
我认为IsolatedStorageSettings
在内部保持共享Stream
,因此多个读者会导致其进入无效状态。
解决方案只是序列化对设置的访问。每当您需要访问您的设置时,请在UI线程上进行(通过Dispatcher.BeginInvoke
)或使用锁定:
public static class ApplicationSettingsHelper
{
private static object syncLock = new object();
public static object SyncLock { get { return syncLock; } }
}
// Later
lock(ApplicationSettingsHelper.SyncLock)
{
// Use IsolatedStorageSettings.ApplicationSettings
}
或者,您可以使用委托隐藏锁:
public static class ApplicationSettingsHelper
{
private static object syncLock = new object();
public void AccessSettingsSafely(Action<IsolatedStorageSettings> action)
{
lock(syncLock)
{
action(IsolatedStorageSettings.ApplicationSettings);
}
}
}
// Later
ApplicationSettingsHelper.AccessSettingsSafely(settings =>
{
// Access any settings you want here
});