ho questo pezzo di codice che non funziona:addEventHandler utilizzando la riflessione
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);
}
Il CardInserted evento esiste in un altro file DLL e l'oggetto "O" carichi OK. Il gestore delegato ha un valore dopo l'effetto. Non posso solo licenziare l'evento.
Il mio unico problema con il codice è che un delegato 'Func <>' non è particolarmente adatto per gli eventi. Se si hanno più abbonamenti all'evento, solo uno di essi produrrà effettivamente il valore di ritorno, il che potrebbe comportare un comportamento non deterministico dell'applicazione. –