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;
}
そのコールバックは起こりません。アプリはすぐにクラッシュします。 –
回答が更新されました。デバッグできないか、エラーメッセージが表示されますか? Dispatcherを使用してイベントを購読しようとしてください。GetForCurrentView()を呼び出すと意味があります。 –
イベントサブスクリプションはUIスレッド上にあるため、ディスパッチャを介して実行する必要はありません。起動時に 'App.xaml.cs'で発生します。また、それが爆発する唯一の方法は、非UIスレッドからUI内の何かにアクセスしようとしていた場合です。 –