Một trong những thú cưng của tôi với sự kiện nâng cao trong C# là một ngoại lệ trong trình xử lý sự kiện sẽ phá vỡ mã của tôi và có thể ngăn các trình xử lý khác bị gọi một xảy ra để được gọi là đầu tiên; Trong hầu hết các trường hợp, mã của tôi không thể quan tâm nếu mã của ai đó đang lắng nghe các sự kiện của nó bị hỏng.Tăng sự kiện trong C# mà bỏ qua ngoại lệ do người xử lý nêu ra
Tôi tạo ra một phương pháp mở rộng mà bắt ngoại lệ:
public static void Raise(this EventHandler eh, object sender, EventArgs e)
{
if (eh == null)
return;
try
{
eh(sender, e);
}
catch { }
}
Mặc dù điều này không có nghĩa là mã của tôi mang về không phân biệt, phương pháp này không chỉ dừng lại một xử lý sự kiện đầu tiên ném một ngoại lệ và ngăn chặn xử lý thứ hai và tiếp theo là thông báo về sự kiện. Tôi đang xem xét một cách lặp qua GetInvocationList để bao bọc từng trình xử lý sự kiện riêng lẻ trong thử/nắm bắt riêng của nó, nhưng điều này có vẻ không hiệu quả và tôi không chắc chắn cách tốt nhất để làm điều đó, hoặc thậm chí nếu tôi nên làm.
Ngoài ra, tôi thực sự không thoải mái đơn giản là bỏ qua ngoại lệ ở đây (và cả FxCop/Resharper cho vấn đề đó); thực tế điều gì sẽ xảy ra với ngoại lệ trong trường hợp này?
Tôi thường tự hỏi cách tốt nhất để xử lý vấn đề này là gì. – ChaosPandion
Điều này thực sự đặt ra một câu hỏi khác tôi sẽ hỏi riêng; trong câu hỏi này tôi đang mã hóa từ quan điểm của lớp nâng cao sự kiện, nhưng tôi tự hỏi nếu xử lý sự kiện nên được phép ném ngoại lệ ở nơi đầu tiên. http://stackoverflow.com/questions/3114543/should-event-handlers-in-c-ever-raise-exceptions – Flynn1179