2014-01-13 3 views
2

Я использую IsolatedStorage общаться с агентом Аудио, как показано ниже:Разработки для Windows Phone - IsolatedStorage

В каждом из моих страниц:

private void playButton_Click(object sender, RoutedEventArgs e) 
    { 

     if (PlayState.Playing == BackgroundAudioPlayer.Instance.PlayerState) 
     { 
      BackgroundAudioPlayer.Instance.Pause(); 
     } 
     else 
     { 
      IsolatedStorageSettings.ApplicationSettings["BtnClicked"] = "1"; (or 2 or 3) 

      IsolatedStorageSettings.ApplicationSettings.Save(); 
      BackgroundAudioPlayer.Instance.Stop(); 
      BackgroundAudioPlayer.Instance.Play(); 

     } 
    } 

В моем AudioPlayer.cs:

`случая UserAction.Play:

if ((string)IsolatedStorageSettings.ApplicationSettings["BtnClicked"] == "1") 
    { 
     _playList = _playList1; 
    } 

    else if ((string)IsolatedStorageSettings.ApplicationSettings["BtnClicked"] == "2") 
    { 

     _playList = _playList; 
    } 

    else if ((string)IsolatedStorageSettings.ApplicationSettings["BtnClicked"] == "3") 
    { 
     _playList = _playList2;    
    } 
     PlayTrack(player);  ` 

Проблема в том, что переменная «_playlist» не поднимается вверх датированных только в первый раз. Например, если я открываю страницу 1, он правильно выбирает _playlist1, но если я нажму «Назад», а затем войдите на страницу 2, он по-прежнему выбирает _Playlist1. Как заставить переменную обновлять каждый раз, когда я выбираю новую страницу в своем приложении? Кроме того, остальная часть кода очень похож на: http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202978%28v=vs.105%29.aspx

+0

PlayList должен измениться с помощью кнопки CLick (как это предполагает код) или с навигацией по страницам? Также ваш статичный плейлист в BAP? – Romasz

+1

Возможный дубликат [Как сохранить настройки в Изолированном хранилище, в то время как экземпляр BackgroundAudioPlayer активен?] (Http://stackoverflow.com/questions/17760531/how-can-i-save-the-settings-in-the- isolatedstorage-while-backgroundaudioplayers) –

ответ

1

MSDN имеет некоторые рекомендации по оптимальной практике с фоном агентов:

http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202944(v=vs.105).aspx#BKMK_CommunicationBetweenForegroundApplicationandBackgroundAgent

Примечательно MSDN ПРЕДЛАГАЕТ НЕ использовать IsolatedStorageSettings для связи между передним планом приложение и фоновый агент. Вместо этого вы должны использовать таблицу SQL или файл в изолированном хранилище, защищенный мьютексом.

+0

Спасибо за ваш ответ. Я не понимаю, почему MSDN специально использует IsolStorageSettings в URL, который я опубликовал изначально. В любом случае, почему переменная не должна обновляться в этом случае? –

+0

Я собирался предположить, что вы можете вызвать IsolStorageSettings.ApplicationSettings.Save(), когда вы меняете настройку, но я вижу, что вы уже это делаете. Я не уверен, почему переменная не будет обновляться, но, возможно, это тот тип коррупции, о котором предупреждает MSDN. – robwirving

+0

Спасибо. Не могли бы вы дать мне пример того, как вы будете обрабатывать это с помощью таблицы или файла SQL с помощью mutex? Благодаря! –

0

Он не обновляется, поскольку значение IsolStorageSettings.ApplicationSettings кэшируется в статической переменной, и нет возможности принудительно перезагрузить его из изолированного хранилища.

Вместо этого вы должны прочитать/записать изолированный файл хранилища, охраняемый именованным мьютексом.

BTW, это хорошая идея разместить этот код вместе с именами файлов + мьютексов в сборке, совместно используемой между графическим интерфейсом и фоновыми процессами: таким образом вы будете уверены, что оба ваших процесса будут использовать одни и те же данные и те же мьютексы ,

P.S. К сожалению, названные мьютексы являются единственными методами межпроцессной синхронизации, доступными на платформе: без семафоров, без событий, без оконных сообщений, локальных сообщений Silverlight, ничего ..

Смежные вопросы