Eplorare gli eventi di un assembly

venerdì 13 novembre 2009 - 18.33

denis.basei Profilo | Senior Member

Salve a tutti.
Uso in un progetto una reference ad una libreria esterna. Esistono due versioni di questa libreria. Una espone un evento DataChanged, un'altra no. Attualmente, in base al destinatario della distribuzione, sono costretto a commentare o meno la seguente istruzione in funzione della versione della reference in uso: AddHandler frm.DataChanged, New EventHandler(AddressOf AggiornaDopoAnteprima) dove frm è l'istanza della reference.
Vorrei trovare un modo per gestire in maniera dinamica questa bivalenza. Ho capito come ricavare se la libreria espone o meno l'evento con questa istruzione:
Dim ei As EventInfo = GetType(AppWorkDraw.AppWorkDrawForm).GetEvent("DataChanged")
If Not ei Is Nothing Then
AddHandler frm.DataChanged, New EventHandler(AddressOf AggiornaDopoAnteprima)
End If

tuttavia frm.DataChanged mi ritorna errore quando non è contemplato nella libreria.

Qualche idea?

Grazie
Denis B. - www.baseiengineering.com

aiedail92 Profilo | Expert

Ciao

Ovviamente dato che l'evento non esiste in quella versione, ti darà l'errore. Puoi comunque usare sempre la reflection per aggiungere il gestore eventi solo se l'evento esiste:

Dim ei As EventInfo = GetType(AppWorkDraw.AppWorkDrawForm).GetEvent("DataChanged") ' IsNot è più leggibile di Not ... Is ... If ei IsNot Nothing Then ' Aggiungi il gestore eventi per l'evento ei (DataChanged) dell'oggetto "frm" ei.AddEventHandler(frm, New EventHandler(AddressOf AggiornaDopoAnteprima)) End If

Luca

denis.basei Profilo | Senior Member

Grazie Luca,

il tuo esempio calza alla perfezione!

Ciao!
Denis B. - www.baseiengineering.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5