IsolatedStorageSettings выбрасывает IsolatedStorageFileStream, когда я пытаюсь получить значение - PullRequest
2 голосов
/ 01 февраля 2012

Я пытаюсь получить логическое значение, которое я сохранил, используя isolatedStoragesettings, например:

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

но я получаю это исключение только при отладке Операция не разрешена в IsolatedStorageFileStream.

когда я использую (запускаю без отладки) Ctrl + F5, это работает просто отлично. Любая идея, что здесь не так?

1 Ответ

3 голосов
/ 02 февраля 2012

Появляется , что это исключение может быть результатом доступа к IsolatedStorageSettings.ApplicationSettings из нескольких потоков (который будет включать обработчик завершения для HTTP-запросов).

Я предполагаю, что IsolatedStorageSettings хранит общий Stream внутри, поэтому несколько читателей приводят его в недопустимое состояние.

Решение - просто сериализовать доступ к настройкам. В любой момент, когда вам нужен доступ к вашим настройкам, сделайте это в потоке пользовательского интерфейса (через 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
});
...