Ich verwende das ResourceManager.Current.DefaultContext.QualifierValues.MapChanged
Ereignis, um Sprachänderungen zu erkennen, während meine App ausgeführt wird. Das funktioniert gut, aber ich erhalte eine Warnung:QualifierValues.MapChanged stürzt App
'ResourceManager.DefaultContext.get' ist veraltet: 'DefaultContext kann für Releases nach Windows 8.1 geändert oder nicht verfügbar sein. Verwenden Sie stattdessen ResourceContext.GetForCurrentView.
Ich wechsele stattdessen meine App zu ResourceContext.GetForCurrentView().QualifierValues.MapChanged
, aber die App stürzt jetzt beim Starten ab. Ich bekomme keine Ausnahmefehler und ich bekomme ein separates Visual Studio-Fenster, das zum Debuggen auftaucht und die einzige Option ist eine neue Instanz von Visual Studio.
Was ist falsch und wie behebe ich das?
Failing Codebeispiel:
// 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;
}
Dieser Rückruf passiert nie. Die App stürzt sofort ab. –
Antwort aktualisiert, können Sie nicht debuggen oder eine Fehlermeldung erhalten? Versuchen Sie, das Ereignis mithilfe von Dispatcher zu abonnieren. Dies ist sinnvoll, wenn Sie GetForCurrentView() aufrufen. –
Das Ereignisabonnement befindet sich bereits im Benutzeroberflächenthread. Es hat also keinen Sinn, es über den Dispatcher auszuführen. Es passiert in 'App.xaml.cs' beim Start. Der einzige Weg, den es in die Luft gehen würde, wäre, wenn es versucht, über einen Nicht-UI-Thread auf etwas in der Benutzeroberfläche zuzugreifen. –