Tôi có đoạn mã này điều đó không làm việc:AddEventHandler sử dụng phản ánh
public CartaoCidadao()
{
InitializeComponent();
object o = WebDAV.Classes.SCWatcher.LoadAssembly();
MethodInfo method =
this.GetType().GetMethod("Inserted",
BindingFlags.NonPublic | BindingFlags.Instance);
EventInfo eventInfo = o.GetType().GetEvent("CardInserted");
Type type = eventInfo.EventHandlerType;
Delegate handler = Delegate.CreateDelegate(type, this , method);
eventInfo.AddEventHandler(o, handler);
}
void Inserted(string readerName, string cardName)
{
System.Windows.Forms.MessageBox.Show(readerName);
}
Các tổ chức sự kiện CardInserted tồn tại trong một tập tin DLL và đối tượng "o" tải OK. Trình xử lý ủy nhiệm có giá trị sau khi có hiệu lực. Tôi chỉ không thể kích hoạt sự kiện.
Mối quan tâm duy nhất của tôi với mã là một đại biểu 'Func <>' không hoàn toàn phù hợp cho các sự kiện. Nếu bạn có nhiều đăng ký cho sự kiện, chỉ một trong số chúng thực sự sẽ tạo ra giá trị trả về, điều này có thể dẫn đến hành vi không xác định của ứng dụng. –