本帖最后由 fxg_ang 于 2013-04-15 13:52:41 编辑

解决方案 »

  1.   

    ====以下是MSN上的代码====
    ====帮助分析下=====
               foreach (Assembly assem in AppDomain.CurrentDomain.GetAssemblies())
                {
                    if (assem.GetName().Name == "mscorlib")
                    {
                        fullName = assem.FullName;
                    }
                }
                Assembly sys = Assembly.Load("System" + fullName.Substring(fullName.IndexOf(",")));
                Type t = sys.GetType("System.Timers.Timer");
                timer = Activator.CreateInstance(t);
                EventInfo eInfo = t.GetEvent("Elapsed");
                Type handlerType = eInfo.EventHandlerType;
                MethodInfo invokeMethod = handlerType.GetMethod("Invoke");
                ParameterInfo[] parms = invokeMethod.GetParameters();
                Type[] parmTypes = new Type[parms.Length];
                for (int i = 0; i < parms.Length; i++)
                {
                    parmTypes[i] = parms[i].ParameterType;
                }
                AssemblyName aName = new AssemblyName();
                aName.Name = "DynamicTypes";
                AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run);
                ModuleBuilder mb = ab.DefineDynamicModule(aName.Name);
                TypeBuilder tb = mb.DefineType("Handler", TypeAttributes.Class | TypeAttributes.Public);
                MethodBuilder handler = tb.DefineMethod("DynamicHandler",MethodAttributes.Public | MethodAttributes.Static,invokeMethod.ReturnType, parmTypes);
                ILGenerator il = handler.GetILGenerator();
                il.EmitWriteLine("Timer's Elapsed event is raised.......");
                il.Emit(OpCodes.Ret);
                Type finished = tb.CreateType();
                MethodInfo eventHandler = finished.GetMethod("DynamicHandler");
                Delegate d = Delegate.CreateDelegate(handlerType, eventHandler);
                eInfo.AddEventHandler(timer, d);
                t.InvokeMember("Interval", BindingFlags.SetProperty, null, timer, new Object[] { 4000 });
                t.InvokeMember("Enabled", BindingFlags.SetProperty, null, timer, new Object[] { true });
                Console.WriteLine("Press the Enter key to end the program.");
                Console.ReadLine();