4

私は自分のApplicationSettingsに対して行った変更が、私のAudioPlayerAgents ApplicationSettingsで更新されていないように思えるという問題があります。異なるIsolatedStorageSettings.ApplicationSettingsを使用することはできますか?

は私のプログラムでは、次のようになります。OnNavigatedToで私のMainPage.xaml.csで

私はオーディオファイルの二つの配列を作成してい

Audio[] aud = new Audio[2]; 
Audio[] aud1 = new Audio[2]; 

aud[0] = new Audio(new Uri("1.mp3", UriKind.Relative), 
        "Test1", 
        "Test1", 
        new Uri("Images/Covers/0000000018724345_256x256_large.jpg",      UriKind.Relative)); 

aud[1] = new Audio(new Uri("2.mp3", UriKind.Relative), 
        "Test2", 
        "Test2", 
        new Uri("Images/Covers/0000000018698018_256x256_large.jpg", UriKind.Relative)); 

aud1[0] = new Audio(new Uri("3.mp3", UriKind.Relative), 
        "Test3", 
        "Test3", 
        new Uri("Images/Covers/0000000018465020_256x256_large.jpg", UriKind.Relative)); 

aud1[1] = new Audio(new Uri("http://traffic.libsyn.com/wpradio/WPRadio_29.mp3", UriKind.Absolute), 
        "Episode 29", 
        "Windows Phone Radio", 
        new Uri("Images/Covers/0000000018844939_256x256_large.jpg", UriKind.Relative)); 

それから私はApplicationSettingsで、このアレイのうちの1つを保存しています

IsolatedStorageSettings.ApplicationSettings["tracklist"] = aud; 
IsolatedStorageSettings.ApplicationSettings.Save(); 

次に、BackgroundAudioPlayerを終了して開始します。

私のAudioPlayerでは、うまく動作する以前に保存されたApplicationSettingsをロードしています。

Audio[] aud; 
IsolatedStorageSettings.ApplicationSettings.TryGetValue<Audio[]>("tracklist", out aud); 

しかし、私は、後に他のアレイ

IsolatedStorageSettings.ApplicationSettings["tracklist"] = aud1; 
    IsolatedStorageSettings.ApplicationSettings.Save(); 

と私のMainPage.xaml.csでApplicationSettingsを交換し、私の古い値がまだある私のAudioPlayerに再び値をロードしたいですApplicationSettings、AudioPlayerAgentとMainPageの両方が同じApplicationSettings権限を使用する必要がありますか?実際に初めてAudioPlayerAgentに保存されて利用できるようになったので、何が欠けていますか?

マイオーディオクラスは、私はあなたが別のアセンブリ/ DLLでMusicPlayerAgentを持っている感覚を持っているこの

[DataContractAttribute] 
public class Audio 
{ 
    [DataMember] 
    public Uri TrackUrl { get; set; } 

    [DataMember] 
    public string Title { get; set; } 

    [DataMember] 
    public string Artist { get; set; } 

    [DataMember] 
    public Uri CoverURL { get; set; } 

    public Audio(Uri trackUrl, string title, string artist, Uri coverUrl) 
    { 
     TrackUrl = trackUrl; 
     Title = title; 
     Artist = artist; 
     CoverURL = coverUrl; 
    } 
} 
+0

もう一度保存する前にIsolatedStorageSettings.ApplicationSettings.Clear()を実行しようとしましたか? – Etch

+0

はい、私のMainPageでクリアを行っているとき、まだ私のMusicPlayerAgentに古い値があります。 MusicPlayerAgentの値をクリアすると、次回に値を読み込もうとしたときに値がなくなります。 – Philiiiiiipp

+0

こんにちはPhiliiiiiipp、この問題をどうにかして解決できましたか?私はWP8アプリケーションでもそれを持っていて、受け入れられた答えについての議論にも従わなかった(私はソリューション内で3番目のプロジェクトを作り、isostorageとのやりとりを担当するクラスを作りました。 – Anton

答えて

1

のように見えます。そうすれば、各アセンブリには独自の独立したストレージが存在するため、問題を説明できます。彼らが同じアセンブリにいるなら、私が持っているほぼすべての私の電話アプリで自分自身をやっているので、それがなぜうまくいかないのか分からない。私が読んだ隔離された記憶装置の最高の読書はここにあります。何かあれば、リンクがうまく読まれることを願っています。 Link

+0

[OK]を、これは問題かもしれない、私は別のプロジェクトで、私は右のプロジェクト - >プロパティをクリックし、両方のプロジェクトで同じになるようにアセンブリ名を変更するときに、アプリケーションはもう起動していません。どのようにそれらを同じアセンブリに入れることができますか? – Philiiiiiipp

+0

別のアプローチは、1つのプロジェクトから独立したストレージを読み書きする他のプロジェクトで使用できるクラスを作成することです。これは過去に行ったルートです。 – Etch

+0

はい私の現在のアプローチは、ファイルから値を読み取るためにシリアライザを使用することです。これは正常に動作します。しかし、このIsolatedStorageSettingsの仕組みがどのように機能するかはまだ分かりません。 – Philiiiiiipp

0

IsolatedStorageが電話で動作するのにどのように悩まされているのか分かりません。 PCアプリの同じネームスペースには明示的なスコーププロパティがあるため、少なくとも別個の親フォルダがあるかどうかを知ることができます。

2つのプロジェクトを1つのファイルにまとめることができない場合は、少なくともクラスまたはメソッドをプロジェクトのいずれかに追加して、そのクラスをIsolatedStorageからロードし、次に、別のプロジェクトから呼び出して、ソリューションエクスプローラのReferencesフォルダにある参照を2番目のプロジェクトの最初のプロジェクトに追加して呼び出すことができます。

1

私は同じ問題に直面しました。 IsolatedStorageSettingsは静的なものに「キャッシュ」されているようです。つまり、バックグラウンドプロセスとフォアグラウンドプロセスの両方が実行されるまで、それぞれは独自のバージョンのIsolatedStorageSettingsを使用します。 は、私は次見つかっ元のコードに深く行き方:ここ

public sealed class IsolatedStorageSettings : ... 
{ 
    private static IsolatedStorageSettings s_appSettings; 
    ... 
    public static IsolatedStorageSettings ApplicationSettings 
    { 
     get 
     { 
      if (IsolatedStorageSettings.s_appSettings == null) 
      { 
       IsolatedStorageSettings.s_appSettings = new IsolatedStorageSettings(false); 
      } 
      return IsolatedStorageSettings.s_appSettings; 
     } 
    } 
    ... 
    private IsolatedStorageSettings(bool useSiteSettings) 
    { 
     if (useSiteSettings) 
     { 
      throw new NotSupportedException(); 
     } 
     this._appStore = IsolatedStorageFile.GetUserStoreForApplication(); 
     this.Reload(); 
    } 

あなたは(それは静的変数だとして)IsolatedStorageSettingsが実際にメソッドのリロード中にプロセスごとに一度だけロードされていることがわかります。 コードを見て、Reloadが呼び出される場所は他にありませんでした。

私は、ベストプラクティスは

私が知っていることから、

です(Philiiiiiippcomment最終彼に言ったように)AudioAgentとアプリケーションの間の動的データを共有するために「自分」の設定のストレージを使用するには、同じ問題に直面して皆を提案することができますAudioTrack.Tagプロパティを使用します。

関連する問題