Torna al Thread

Dim iEvento As EventInfo, D As [Delegate], Eventi() As Object, i As Integer Dim HandlerType As Type, InvokeMethod As MethodInfo, Parms As ParameterInfo() Dim ParmTypes() As Type, AName As New AssemblyName() Dim AB As AssemblyBuilder, MB As ModuleBuilder, TB As TypeBuilder Dim Handler As MethodBuilder, IL As ILGenerator Dim Finished As Type, EventHandler As MethodInfo Dim Metodo As MethodInfo Try iEvento = MyClasse.GetType.GetEvent(NEvento) HandlerType = iEvento.EventHandlerType InvokeMethod = HandlerType.GetMethod("Invoke") Parms = InvokeMethod.GetParameters() 'Elenco i parametri che ritorna l'evento ReDim ParmTypes(Parms.Length - 1) For i = 0 To Parms.Length - 1 ParmTypes(i) = Parms(i).ParameterType Next i AName.Name = "DynamicTypes" AB = AppDomain.CurrentDomain.DefineDynamicAssembly(AName, AssemblyBuilderAccess.Run) MB = AB.DefineDynamicModule(AName.Name) TB = MB.DefineType("Handler", TypeAttributes.Class Or TypeAttributes.Public) Handler = TB.DefineMethod("DynamicHandler", MethodAttributes.Public Or MethodAttributes.Static, InvokeMethod.ReturnType, ParmTypes) ReDim Eventi(1) '1° Nome Evento, 2° HandlerType Eventi(0) = NEvento Eventi(1) = HandlerType Metodo = Assembly.GetExecutingAssembly.GetType.GetMethod("ChiamaEvento") IL = Handler.GetILGenerator() IL.EmitCall(OpCodes.Call, Metodo, Eventi) IL.Emit(OpCodes.Ret) Finished = TB.CreateType() EventHandler = Finished.GetMethod("DynamicHandler") D = [Delegate].CreateDelegate(HandlerType, EventHandler) iEvento.AddEventHandler(MyClasse, D) Catch ex As TargetException Throw New Exception("Evento non statico") Exit Sub Catch ex As NullReferenceException Throw New Exception("Evento inesistente") Exit Sub Catch ex As Exception Console.Beep() 'Throw New Exception("Tipo dati non valido") End Try
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5