2011-11-13 57 views
8

Ứng dụng của tôi được xây dựng trong WPF nhưng nó bao gồm một số thành phần WinForms mà chúng tôi đã viết. Khi một ngoại lệ được unhandled trong một trong các thành phần WinForms nó treo ứng dụng.Xử lý các ngoại lệ không hợp lệ từ các thành phần Winforms trong WPF

Tôi đã triển khai DispatcherUnhandledException cho các sự kiện WPF. Điều này là tốt vì nó cho phép tôi hiển thị lỗi và đánh dấu ngoại lệ là Đã xử lý để tránh sự cố.

Tôi có thể làm điều gì đó tương tự với ngoại lệ không phải WPF hay không. Tôi đã hy vọng cho hộp thoại WinForms tiêu chuẩn được sử dụng để đi lên và cho phép người dùng tiếp tục hoặc hoàn toàn ứng dụng?

Chỉnh sửa: Ngoại lệ WinForms bị kẹt trong DispatcherUnhandledException nhưng đặt e.Handled thành true không dừng ứng dụng bị lỗi.

+1

bạn có thể hiển thị một số mã về cách bạn hiển thị/sử dụng biểu mẫu Windows Forms không? –

+0

'DispatcherUnhandledException' sẽ bắt gặp bất kỳ ngoại lệ không được xử lý nào trong chuỗi giao diện người dùng. Các thành phần WinForms của bạn có sử dụng các chủ đề khác không? Hoặc bạn đang truy cập chúng từ các chủ đề khác do nhầm lẫn? – svick

+0

@DavidePiras Chúng được lưu trữ trong một điều khiển WindowsFormsHost trong đánh dấu WPF. Ví dụ. windowsFormsHost.Child = [thể hiện của điều khiển WinForms] –

Trả lời

8
+0

Không, tôi chưa thử. Sẽ có một cái nhìn. –

+0

Cảm ơn rất nhiều! SetUnhandledExceptionMode đã làm các trick. –

+0

Bạn đã sử dụng chúng chính xác như thế nào? Tôi đã thử lúc khởi động ứng dụng WPF để thiết lập một trình xử lý cho ThreadException và sau đó tôi SetUnhandledExceptionMode để CatchException nhưng trình xử lý không bao giờ được gọi là .. –