8

在调试/运行我的 Metro 应用程序时,我遇到了一些奇怪的行为。在拖放过程中,屏幕将被刷新。我添加了一些功能来阻止绑定属性在拖放过程中刷新。

但有时应用程序崩溃,但不是抛出一些我可以调试的异常,我得到的只是一个窗口说打开一个外部即时调试器

SOME_APP.exe [7785] 中出现未处理的 win32 异常。

(外部调试器没有带来更多信息)

输出说:

SOME_APP.exe 中 0x05017145 (Windows.UI.Xaml.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000088。

我正在使用 x64 设备。有人听说过这样的问题吗?

4

1 回答 1

11

如果您通过 NavigationParameter 传递实现 INotifyPropertyChanged 的​​对象、继承的 BindableBase 或 DependencyObject 等;然后在 NavigatedPage 中绑定(或将它们绑定在导航页面中),您很可能会收到此错误。导航时不要通过 NavigationParameter 传递除原始类型以外的任何对象。

您收到此异常是因为不存在引用的方法。例如。

  1. 您有一个名为 Categories 的对象,它继承了 BindableBase。
  2. 您将其绑定到 Home.xaml。
  3. Home.xaml 的绑定机制订阅了 Categories 对象的 PropertyChanged 事件。
  4. 您导航了 Article.xaml,将 Categories 对象作为 NavigationParameter 传递。
  5. 您将 Categories 对象绑定到 Article.xaml。
  6. 当 Categories 对象中的属性发生变化时;该属性将触发 PropertyChanged 事件。
  7. 该事件有两个订阅者。Home.xaml 和 Article.xaml,但 Home.xaml 不再存在,因为您离开了它。但是您的代表拥有它的地址;所以它尝试执行;并因访问冲突错误而失败。
于 2012-09-28T08:42:32.337 回答