2012-08-09 10 views
8

Ich habe ein seltsames Verhalten beim Debuggen/Ausführen meiner Metro-App. Während Drag'n'Drop wird der Bildschirm aktualisiert. Ich hatte einige Funktionen hinzugefügt, um verbrückte Eigenschaften vor der Aktualisierung zu schützen, während Drag'n'Drop in Bearbeitung ist.Win8 - Unbehandelte Ausnahme in Windows.UI.Xaml.dll

Aber manchmal ist der App Absturz, aber anstatt eine Ausnahme zu werfen, die ich debuggen kann, alles was ich habe ist ein Fenster eine externe zu öffnen sagen, just-in-time-Debugger

Eine nicht behandelte win32 Ausnahme in SOME_APP.exe [7785] aufgetreten.

(Der externe Debugger bringt nicht mehr Informationen)

Und die Ausgabe sagt:

Nicht behandelte Ausnahme bei 0x05017145 (Windows.UI.Xaml.dll) in SOME_APP.exe: 0xC0000005 : Zugriffsverletzung beim Lesen des Standorts 0x00000088.

Ich arbeite auf einem x64-Gerät. Hat jemand jemals von einem solchen Problem gehört?

+0

Es gab Ihnen eine vollkommen gute Ausnahme - Zugriffsverletzung. Sie versuchen, auf Speicher zuzugreifen oder ihn zu ändern, der nicht Ihnen gehört. – steveg89

+0

Ja, scheint es, aber ich mache keine Speicheradressierung per Code. Könnte es Probleme mit win8, xaml.dll und/oder 32bit System vs. 64bit geben? – salcosand

+0

Ich kann nicht sicher sagen, aber mein erster Test wäre es, Ihren Code zu kommentieren, der die Aktualisierung deaktiviert und überprüft, ob der Fehler weiterhin besteht. Sie könnten, ohne es zu wissen, die Erinnerung irgendwo dort verdammen, was zu diesem Fehler führen könnte. Das ist alles hypothetisch. Wenn der Fehler nicht mehr auftritt und der Code entfernt wurde, möchten Sie möglicherweise das, was Sie gerade tun, posten, damit wir nach Fehlern suchen können. – steveg89

Antwort

11

Wenn Sie Objekte übergeben INotifyPropertyChanged, geerbte BindableBase oder DependencyObject etc. durch NavigationParameter übergeben; und bind dann in der NavigatedPage (oder verband sie in der navigierenden Seite) Sie werden höchstwahrscheinlich diesen Fehler erhalten. Übergeben Sie während der Navigation kein Objekt außer dem primitiven Typ über NavigationParameter.

Sie erhalten diese Ausnahme wegen nicht vorhandener referenzierter Methoden. Beispielsweise.

  1. Sie haben ein Objekt namens Categories, das BindableBase erbt.
  2. Sie haben das an Home.xaml gebunden.
  3. Der Bindungsmechanismus von Home.xaml hat das PropertyChanged-Ereignis des Categories-Objekts abonniert.
  4. Sie haben das Article.xaml-Objekt Categories als NavigationParameter durchlaufen.
  5. Sie haben das Categories-Objekt an Article.xaml gebunden.
  6. Wenn sich eine Eigenschaft im Categories-Objekt ändert; Diese Eigenschaft löst das PropertyChanged-Ereignis aus.
  7. Es gibt zwei Abonnenten für dieses Ereignis. Home.xaml und Article.xaml, aber Home.xaml ist nicht mehr vorhanden, da Sie davon weg navigiert sind. Aber Ihr Delegierter hält die Adresse davon; So versucht es Execute; und scheitern mit Zugriffsverletzungsfehler.
Verwandte Themen