2009-08-28 32 views
20

Tôi đã xem qua câu hỏi này trong Bài kiểm tra thực hành của Microsoft và tôi đã nhầm lẫn. Đây là câu hỏi:Tăng sự kiện trong C#

nào của mã mẫu sau đây C# là cách thích hợp để nâng cao một sự kiện, giả định rằng sự kiện báo động, lớp AlarmEventArgs, và AlarmEventHandler đại biểu đã tuyên bố?

Dưới đây là câu trả lời "đúng" họ đã cung cấp:

AlarmEventArgs e = new AlarmEventArgs(1, 2); 
AlarmEventHandler handler = Alarm; 
if (handler != null) 
{ 
    handler(this, e); 
} 

Tuy nhiên, đó cũng là một câu trả lời mà có vẻ đúng.

AlarmEventArgs e = new AlarmEventArgs(1, 2); 
if (Alarm!= null) 
{ 
    Alarm (this, e); 
} 

Cá nhân tôi, luôn sử dụng phương pháp thứ hai. Nó hoạt động tốt. Ai đó có thể vui lòng cho tôi biết lý do tại sao tôi nên sử dụng phương pháp đầu tiên thay vì thứ hai?

+2

có thể trùng lặp của [Kiểm tra null trước khi gửi sự kiện ... chủ đề an toàn?] (Http://stackoverflow.com/questions/282653/checking-for-null-before-event-dispatching-thread-safe) – doppelgreener

Trả lời

15

Tôi đã hỏi một câu hỏi tương tự. Câu trả lời được chấp nhận là một lời giải thích tốt.

Checking for null before event dispatching... thread safe?

+0

Phương thức ủy nhiệm vô danh được đề xuất bởi người dùng 'Cherian' chỉ là đẹp. Tay xuống người chiến thắng :) –

+0

Một khi bạn bắt đầu, bạn hãy xoay quanh khái niệm có phần chức năng mà các trình xử lý rỗng là ok – spender

7

Trong một môi trường đa luồng, có thể là xử lý sự kiện có thể được cập nhật trong khi sự kiện của bạn đã được gửi đi. Để tránh trường hợp này, bạn gán trình xử lý cho một biến cục bộ trước khi kiểm tra null và gửi đi thông báo.

Các vấn đề liên quan