我尝试获取值时,IsolatedStorage设置会抛出IsolatedStorageFileStream

时间:2012-02-01 13:25:59

标签: silverlight windows-phone-7 exception isolatedstorage

我正在尝试使用像这样的isolatedStoragesettings保存我保存的布尔值:

IsolatedStorageSettings.ApplicationSettings.TryGetValue(KEYSTRING, out myBoolValue);

但是只有在调试时才会出现此异常     IsolatedStorageFileStream上不允许操作。

当我使用(没有调试运行)Ctrl + F5它工作得很好。这里有什么想法吗?

1 个答案:

答案 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
});