反射程序集

public void ReflectAssembly(List<DataTable> tables, string iteGuid, Dictionary<string, string> tableKeys)
        {
            string path = string.Format(@"E:\OGT\LogicCheckProcessExecutor\Build\Debug\AssemblyDirectory\TimeCopy.dll");
            Assembly assembly = Assembly.LoadFile(path);
            string typeName = string.Format("TimeCopy. TimeCopy ");//类的FullName即”命名空间.类名”的
            Type type = assembly.GetType(typeName, false, false);//根据类的名称,获得类的Type
            //生成控件对象
            //GetConstructo()里的参数new Type[]{}是构造函数中传进去的参数的类型
            //在该示例中public TimeCopy(List<DataTable> tables, string itemGuid, Dictionary<string, string> tableKeys)
            //            : this()
            //        {
            //          DataSourceTables = tables;
            //          ItemGuid = itemGuid;
            //         TableKeys = tableKeys;
            //      }
            ConstructorInfo constructInfo = type.GetConstructor(new Type[] { typeof(List<DataTable>), typeof(string), typeof(Dictionary<string, string>) });


            //给构造函数里的参数传值
            object obj = constructInfo.Invoke(new object[] { tables, iteGuid, tableKeys });
            //注册事件     
            //ProcessExecuteForm是当前类的名字,因为事件方法timeCopy_EndEdit在当前类里,想注册的事件在哪个类里,前面的Type就写哪个类的Type
            MethodInfo myEndEditHandler = typeof(ProcessExecuteForm).GetMethod("timeCopy_EndEdit", BindingFlags.NonPublic | BindingFlags.Instance);
            RegisteEvent(type, obj, "EndEdit", myEndEditHandler);
            //展示控件
            ShowForm showForm = new ShowForm();//ShowForm是一个窗体,用来展示控件
            showForm.Controls.Clear();
            showForm.Controls.Add(obj as UserControl);//示例TimeCopy是一个继承于UserControl的控件类
            showForm.ShowDialog();

        }
        private void RegisteEvent(Type type, object target, string eventName, MethodInfo myEndEditHandler)
        {
            EventInfo eventEndEdit = type.GetEvent(eventName);//获取事件
            Type tEndEdit = eventEndEdit.EventHandlerType;
            //tEndEdit要创建委托的System.Type,this委托要绑定的对象,myEndEditHandler描述委托要表示的静态或实例方法
            Delegate dEndEdit = Delegate.CreateDelegate(tEndEdit, this, myEndEditHandler);//创建委托
            eventEndEdit.AddEventHandler(target, dEndEdit);//给事件添加委托(注册事件)
        }
        private void timeCopy_EndEdit(object sender, OGT.SJLJJC.Execute.EventAgs.EndEditEventArgs e)
        {
            // OGT.SJLJJC.Execute.EventAgs.EndEditEventArgs e是自定义的事件参数
            //public class EndEditEventArgs : EventArgs
            //{
            //    public DataTable Data { get; set; }
            //    public string ItemGuid { get; set; }
            //    public EndEditEventArgs()
            //        : base()
            //    {

            //    }
            //}

            if (e.Data == null)
                return;
            else
                MessageBox.Show("结束");

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值