2

以下のように、IsolatedStorage を使用して Audio エージェントと通信しています。

私の各ページで:

 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 で:

`case 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と非常によく似ています。

4

2 に答える 2

1

MSDN には、バックグラウンド エージェントのベスト プラクティスに関するガイドラインがいくつかあります。

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

特に、MSDN は、フォアグラウンド アプリとバックグラウンド エージェント間の通信に IsolatedStorageSettings を使用しないことを提案しています。代わりに、SQL テーブル、またはミューテックスによって保護された分離ストレージ内のファイルを使用する必要があります。

于 2014-01-13T14:39:48.803 に答える
0

IsolatedStorageSettings.ApplicationSettings の値は静的変数にキャッシュされ、分離ストレージから強制的に再読み込みする方法がないため、更新されません。

代わりに、名前付きミューテックスによって保護された、分離されたストレージ ファイルを読み書きする必要があります。

ところで、GUI とバックグラウンド プロセス間で共有されるアセンブリに、ファイル + ミューテックス名と共にそのコードを配置することをお勧めします。これにより、両方のプロセスが同じデータと同じミューテックスを使用することが保証されます。

PS 残念ながら、このプラットフォームで使用できるプロセス間同期方法は、名前付きミューテックスのみです。セマフォ、イベント、Windows メッセージ、Silverlight のローカル メッセージなどはありません。

于 2014-01-14T21:24:50.677 に答える