Появляется , что это исключение может быть результатом доступа к 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
});