2016-03-29 26 views
1

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; 
} 

Antwort

0

ich es in einem Beispielprojekt habe ich versucht, erstellt, es funktioniert !! ich nicht genau wissen, warum dieser Fehler konfrontiert .. aber man könnte versuchen, diese:

try { 

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

Vielleicht fangen wir die Ausnahme, denn jetzt werden wir nur die Dinge versuchen, ohne darauf achten, was ist, wenn es funktionieren werde oder nicht.

+0

Dieser Rückruf passiert nie. Die App stürzt sofort ab. –

+0

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. –

+0

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. –