2013-01-05 18 views
7

Tôi đang làm việc trên dự án C# và muốn sử dụng sự kiện UnhandledException để bắt bất kỳ ngoại lệ nào tôi có thể đã bỏ lỡ trong dự án của tôi (hy vọng sẽ không có bất kỳ điều gì ngoài việc ở cùng một bên).AppDomain UnhandledException

Tôi thực hiện khá nhiều phần mềm nên tôi muốn tạo một thư viện lớp mà tất cả các dự án của tôi sẽ sử dụng vì vậy tôi muốn có một chức năng thực hiện tất cả các công việc khởi tạo của tất cả các dự án mà không cần phải sao chép và dán mã vào từng dự án để thực hiện công việc tương tự.

Những gì tôi đang tự hỏi là nếu tôi có trong thư viện lớp sự kiện ngoại lệ unhandled sử dụng đoạn mã sau

AppDomain currentDomain = AppDomain.CurrentDomain; 
      currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException); 

Liệu ngoại lệ unhandled chỉ được sử dụng từ bên trong thư viện lớp học hoặc sẽ xử lý sự kiện này cũng được exeucted từ bất kỳ dự án mà các tài liệu tham khảo thư viện lớp.

Cảm ơn bạn đã trợ giúp bạn có thể cung cấp.

Trả lời

5

Giả sử tất cả các dự án của bạn đang chạy trong cùng một miền ứng dụng, thao tác này sẽ hoạt động chính xác. Chúng tôi có mã chính xác này được đóng gói trong một tệp DLL phổ biến được chia sẻ giữa nhiều ứng dụng.

Một đề xuất bổ sung: nếu điều này được sử dụng trong các ứng dụng Windows Forms, bạn có thể cũng muốn thêm một trình xử lý cho System.Windows.Forms.Application.ThreadException. Điều này đóng vai trò như một điểm dừng khi, ví dụ, ai đó quên thêm xử lý ngoại lệ vào một sự kiện kiểm soát.

+0

Cảm ơn sự giúp đỡ của bạn. Nó cho một ứng dụng giao diện điều khiển tôi đang làm việc trên nhưng tôi sẽ làm cho một không về ThreadException cho các hình thức. Đây có phải là trường hợp cho các ứng dụng WPF hay chỉ các dạng cửa sổ kiểu cũ – Boardy

1

Có thể tải một assembly vào một miền ứng dụng khác, nhưng miễn là bạn nạp các assembly (như thư viện lớp) vào miền ứng dụng hiện tại, điều này sẽ xử lý ngoại lệ.

Mối quan hệ giữa các lĩnh vực ứng dụng và lắp ráp:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

Ví dụ, Assembly.LoadFile() hoặc Assembly.Load() sẽ tải lắp ráp vào miền ứng dụng hiện hành.

Mã của bạn có thể tạo một miền ứng dụng mới với:

AppDomain.CreateDomain(..), sau đó nó có thể nạp hội vào lĩnh vực này, trong đó sẽ không được xử lý bởi mã của bạn.

Nếu bạn tham chiếu thư viện trong dự án của bạn, chúng sẽ được tải vào miền ứng dụng hiện tại.