2014-01-13 151 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

播放列表應與按鈕單擊更改(如代碼設辦)或頁面導航?你的播放列表是否在BAP中是靜態的?的 – Romasz

+1

可能重複[我怎樣才能保存在IsolatedStorage中的設置,而BackgroundAudioPlayer的情況下被激活?](http://stackoverflow.com/questions/17760531/how-can-i-save-the-settings-in-the-存儲背景音樂播放器) –

回答

1

MSDN有最佳實踐後臺代理的一些準則:

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

值得注意的是MSDN表明使用IsolatedStorageSettings前臺之間的通信應用程序和後臺代理。您應該使用SQL表或由互斥鎖保護的隔離存儲中的文件。

+0

感謝您的回答。我不明白爲什麼MSDN在我最初發布的URL中專門使用了IsolatedStorageSettings。無論哪種方式,爲什麼在這種情況下不會更新變量? –

+0

我打算建議您在每次更改設置時都可以調用IsolatedStorageSettings.ApplicationSettings.Save(),但我已經看到您已經這樣做了。我不確定爲什麼變量不會被更新,但也許這是MSDN警告的那種腐敗。 – robwirving

+0

謝謝。您能否給我舉一個例子,說明如何通過互斥鎖使用SQL表或文件來處理這個問題?謝謝! –

0

它沒有更新,因爲IsolatedStorageSettings.ApplicationSettings值在靜態變量緩存,而且也沒有辦法迫使它從獨立存儲重裝。

相反,你應該讀/寫一個孤立的存儲文件,由指定的互斥鎖保護。

順便說一句,在GUI和後臺進程之間共享的程序集中放置該代碼以及文件+互斥體名稱是一個好主意:通過這種方式,您可以確保兩個進程將使用相同的數據和相同的互斥量。

P.S.不幸的是,一個名爲互斥的平臺上唯一可用的進程間同步方法:沒有信號燈,沒有活動,沒有窗戶的消息,沒有Silverlight的本地信息,沒有什麼..