2016-03-29 3 views
1

ResourceManager.Current.DefaultContext.QualifierValues.MapChangedイベントを使用して、アプリケーションの実行中に言語の変更を検出しています。これは正常に動作しますが、私は警告を取得:QualifierValues.MapChangedクラッシュApp

「ResourceManager.DefaultContext.get」廃止されました:「をデフォルトコンテキストは、Windows 8.1の後のリリースで変更または使用不能にすることができます。代わりに、ResourceContext.GetForCurrentViewを使用します。

私のアプリはResourceContext.GetForCurrentView().QualifierValues.MapChangedに切り替わりますが、起動時にアプリがクラッシュするようになりました。例外が発生しないため、デバッグするためにポップアップする別のVisual Studioウィンドウが表示され、唯一のオプションはVisual Studioの新しいインスタンスです。

何が問題なのですが、これを修正するにはどうすればよいですか?コード例失敗

// App.xaml.cs 

protected async override Task OnInitializeAsync(IActivatedEventArgs args) 
{ 
    // Doesn't work. Yes this is in an async method... 
    ResourceContext.GetForCurrentView().QualifierValues.MapChanged += QualifierValuesMapChanged; 

    // But this is the next line and works fine. 
    Dispatcher.Initialize(); 

    // This works just fine. 
    ResourceContext.GetForViewIndependentUse().QualifierValues.MapChanged += QualifierValuesMapChanged; 

    // So does this. 
    ResourceManager.Current.DefaultContext.QualifierValues.MapChanged += QualifierValuesMapChanged; 
} 

答えて

0

を私はそれが動作しますが、私が作成したサンプルプロジェクトでそれを試してみました! このエラーに直面し、なぜ私は正確に知らない..しかし、あなたはこれを試みることができる:今、私達はちょうどそれがうまくいく場合はわからせずに物事をみますので

try { 

var resourceContext = ResourceContext.GetForCurrentView(); 
resourceContext.QualifierValues.MapChanged += QualifierValuesMapChanged; 
} 
catch(Exception ex){ 
ex.Handled = true; 
Debug.Write(ex.Message); 
} 

は多分、我々は、例外をキャッチか否か。

+0

そのコールバックは起こりません。アプリはすぐにクラッシュします。 –

+0

回答が更新されました。デバッグできないか、エラーメッセージが表示されますか? Dispatcherを使用してイベントを購読しようとしてください。GetForCurrentView()を呼び出すと意味があります。 –

+0

イベントサブスクリプションはUIスレッド上にあるため、ディスパッチャを介して実行する必要はありません。起動時に 'App.xaml.cs'で発生します。また、それが爆発する唯一の方法は、非UIスレッドからUI内の何かにアクセスしようとしていた場合です。 –

関連する問題