2012-08-09 18 views
8

Tôi đã có một số hành vi lạ trong khi gỡ lỗi/chạy ứng dụng metro của mình. Trong khi kéo thả, màn hình sẽ được làm mới. Tôi đã thêm một số chức năng để chặn các thuộc tính bị ràng buộc từ làm mới trong khi drag'n'drop đang được tiến hành.Win8 - Ngoại lệ chưa xử lý trong Windows.UI.Xaml.dll

Nhưng đôi khi sự sụp đổ của ứng dụng, nhưng trong thay vì ném một số ngoại lệ mà tôi có thể gỡ lỗi, tất cả tôi nhận được một cửa sổ nói để mở một just-in-time-debugger

Một ngoại lệ win32 unhandled bên ngoài đã xảy ra trong SOME_APP.exe [7785].

(Các debugger bên ngoài không mang lại nhiều thông tin)

Và đầu ra nói:

Unhandled ngoại lệ tại 0x05017145 (Windows.UI.Xaml.dll) trong SOME_APP.exe: 0xc0000005 : Truy cập vi phạm vị trí đọc 0x00000088.

Tôi đang làm việc trên thiết bị x64. Có ai từng nghe về vấn đề đó không?

+0

Nó cung cấp cho bạn một ngoại lệ hoàn toàn tốt - Vi phạm truy cập. Bạn đang cố truy cập hoặc sửa đổi bộ nhớ không phải của bạn. – steveg89

+0

vâng, có vẻ như, nhưng tôi không làm bất kỳ bộ nhớ nào giải quyết bằng mã. Có thể có một số vấn đề với win8, xaml.dll và/hoặc hệ thống 32bit so với 64bit không? – salcosand

+0

Tôi không thể chắc chắn nhưng bài kiểm tra đầu tiên của tôi sẽ là nhận xét mã của bạn sẽ tắt tính năng làm mới và xem lỗi có còn hay không. Bạn có thể, mà không biết điều đó, làm hỏng bộ nhớ ở đâu đó trong đó có thể dẫn đến lỗi này. Đây là tất cả các giả thuyết mặc dù. Nếu lỗi không còn xảy ra với mã đã bị xóa, bạn có thể muốn đăng chính xác những gì bạn đang làm trong đó để chúng tôi có thể tìm lỗi. – steveg89

Trả lời

11

Nếu bạn đang truyền các đối tượng được triển khai INotifyPropertyChanged, kế thừa BindableBase hoặc DependencyObject v.v. qua NavigationParameter; và sau đó liên kết trong NavigatedPage (hoặc liên kết chúng trong trang điều hướng), bạn sẽ rất có thể gặp phải lỗi này. Không vượt qua bất kỳ đối tượng nào ngoại trừ kiểu nguyên thủy thông qua NavigationParameter khi điều hướng.

Bạn nhận được ngoại lệ này vì các phương pháp được tham chiếu không tồn tại. Ví dụ.

  1. Bạn có một đối tượng có tên Danh mục kế thừa BindableBase.
  2. Bạn đã ràng buộc điều đó với Home.xaml.
  3. Cơ chế ràng buộc của Home.xaml đã đăng ký sự kiện PropertyChanged của đối tượng Danh mục.
  4. Bạn đã điều hướng đối tượng Article.xaml chuyển Danh mục dưới dạng NavigationParameter.
  5. Bạn đã ràng buộc đối tượng Danh mục với Article.xaml.
  6. Khi thuộc tính thay đổi trong đối tượng Danh mục; tài sản đó sẽ kích hoạt sự kiện PropertyChanged.
  7. Có hai người đăng ký sự kiện đó. Home.xaml và Article.xaml, nhưng Home.xaml không còn tồn tại kể từ khi bạn điều hướng khỏi nó. Nhưng đại biểu của bạn giữ địa chỉ của nó; vì vậy nó cố gắng thi hành; và không thành công với lỗi vi phạm Truy cập.