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이 배열 중 하나를 저장하고

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

그런 다음 BackgroundAudioPlayer를 닫고 시작합니다.

BackgroundAudioPlayer.Instance.Close(); 
BackgroundAudioPlayer.Instance.Play(); 

내 AudioPlayer에서 잘 작동하는 이전에 저장 한 ApplicationSettings를로드하고 있습니다. 나중에 다른 배열

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

내 MainPage.xaml.cs를에 ApplicationSettings를 교체하고 내 AudioPlayer에 다시 값을로드 할 때

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

는하지만 여전히에서 이전 값입니다 내 ApplicationSettings, AudioPlayerAgent 및 MainPage 모두 동일한 ApplicationSettings 권한을 사용해야합니까? 사실 AudioPlayerAgent에 처음 저장되고 사용 가능하므로 무엇이 없습니까?

내 오디오 클래스는이

[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 애플 리케이션에서 그것을 가지고 심지어 대답을 받아 들일 수 없었어요 당신의 토론에 따라 (나는 솔루션 및 isostorage와 상호 작용에 대한 책임이 클래스에서 세 번째 프로젝트를 만들었습니다 그리고 도움이되지 않았다) 도움이되지 않았다. – Anton

답변

1

처럼 당신이 다른 어셈블리/DLL의 MusicPlayerAgent이 느낌이 보인다. 그렇게하면 각 어셈블리마다 자체 격리 된 저장소가 있으므로 문제를 설명 할 수 있습니다. 그들이 같은 어셈블리에 있다면 나는 내가 가지고있는 거의 모든 내 폰 애플 리케이션에서 그 자신을하기 때문에 그 wouldnt 작업이 왜되는지 알지 못한다. 여기 내가 읽은 격리 저장소에 대한 최상의 읽기가 있습니다. 무엇이라도 나는 좋은 연결다는 것을 희망한다. Link

+0

좋아요,이게 문제 일 수도 있습니다. 다른 프로젝트에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성 -> 속성을 ​​클릭하고 두 프로젝트에서 어셈블리 이름을 동일하게 변경하면 앱이 더 이상 시작되지 않습니다. 같은 어셈블리에 어떻게 넣을 수 있습니까? – Philiiiiiipp

+0

다른 접근법은 하나의 프로젝트 격리 저장소에서 읽고 쓰는 다른 프로젝트에서 사용할 수있는 클래스를 작성하는 것일 수 있습니다. 이것이 내가 과거에 간 경로입니다. – Etch

+0

예 현재 접근 방식은 파일 사이에서 값을 읽는 사이에 직렬기를 사용하는 것이지만이 방법도 문제가 없습니다. 그러나이 IsolatedStorageSettings 작업이 어떻게 작동하는지 아직도 이해할 수 없습니다. – Philiiiiiipp

0

IsolatedStorage가 전화에서 작동하는 방식을 이해하지 못합니다. PC 응용 프로그램의 동일한 네임 스페이스에는 명시적인 범위 속성이 있으므로 별도의 부모 폴더가 있는지 여부를 알 수 있습니다.

하나의 프로젝트에서 다른 프로젝트로 모든 파일을로드하는 것만으로 두 프로젝트를 하나로 결합 할 수 없다면 최소한 하나의 프로젝트에 하나의 클래스 나 메소드를 추가하여 IsolatedStorage에서 클래스를로드하고 인스턴스를 만든 다음 다른 프로젝트에서 호출하여 솔루션 탐색기의 References 폴더에있는 참조를 두 번째 프로젝트의 첫 번째 프로젝트에 추가하여 호출 할 수 있도록합니다.

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 속성을 사용합니다.

관련 문제