在frmMain类中的代码

private void StartRun(string tag, string date, bool tipType)
        {
            var dllPath = string.Format("{0}.{1}", GetType().Namespace, tag);
            var assembly = Assembly.Load(dllPath);
            var classFullPath = string.Format("{0}.{1}.{2}", GetType().Namespace, tag, "RunBTW");
            var type = assembly.GetType(classFullPath);
            object instance = assembly.CreateInstance(classFullPath);
            var eventInfo = type.GetEvent("AppendTips", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);
            var tDelegate = eventInfo.EventHandlerType;

var miHandler = typeof(frmMain).GetMethod("AppendTips", BindingFlags.Public | BindingFlags.Static);
            var d = Delegate.CreateDelegate(tDelegate, miHandler);
            var miAddHandler = eventInfo.GetAddMethod();
            object[] addHandlerArgs = { d };
            miAddHandler.Invoke(instance, addHandlerArgs);

var method = type.GetMethod("StartRun");
            method.Invoke(instance, new object[] { date, tipType });
        }

public static void AppendTips(string tips, Color color, bool tipsType)
        {
            if (frm.richResultAuto.InvokeRequired)
            {
                AppendTipsDelegate atd = new AppendTipsDelegate(Tips);
                frm.Invoke(atd, new object[] { tips, color, tipsType });
            }
            else
            {
                Tips(tips, color, tipsType);
            }
        }

动态加载dll文件Assembly.Load加载的是相对路径 而Assembly.LoadFile需要一个绝对路径

frmMain类中的AppendTips方法必须是public static 不然绑定不了。

var eventInfo = type.GetEvent("AppendTips", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static);中的AppendTips这里是反射了RunBTW类中的AppendTips事件名称。

public class RunBTW
  {

public delegate void AppendTipsDelegate(string tips, Color color, bool tipsType);

public event AppendTipsDelegate AppendTips;

public void StartRun(string date, bool tipsType)
      {

}

}

RunBTW中的StartRun方法是没有返回值如果有返回值,比如说返回一个int类型

var cusRerurnValue=  method.Invoke(instance, new object[] { date, tipType });

这里的cusRerurnValue就是返回值。

参考自:http://bbs.csdn.net/topics/330067707

C# 关于反射事件的更多相关文章

  1. c# 反射事件

    被反射类中: public delegate void CompeletedHandler(); public static event CompeletedHandler AnalysisCompe ...

  2. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  3. Android 框架学习1:EventBus 3.0 的特点与如何使用

    前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...

  4. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  5. 通过反射绑定事件_Office Visio

    花了好几个小时才Try出来,记录一下: //反射获取Visio.Application,此处没有判断是否有安装Visio            mVisioType = System.Type.Get ...

  6. C# 调用一个按钮的Click事件(利用反射)

    最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...

  7. 使用反射让Spinner选择同一选项时触发onItemSelected事件

    翻看源码,Spinner判断是否触发onItemSelected,是在它的基类AdapterView里面做的: void checkSelectionChanged() { if ((mSelecte ...

  8. java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)

    Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...

  9. Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)

    Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...

随机推荐

  1. CentOS 7 网络配置、远程访问

    网络配置(配置固定IP访问) 相关命令 ip add 查看网卡状态 ifup eth0 打开端口eth0 ifdown eth0 关闭端口eth0 dhclient 自动获取IP mii-tool e ...

  2. RS-485总线和Modbus通信协议的关系

    一.RS-485总线 RS-485总线技术只是规定了接口的电气标准,并没有规定RS-485接口的电缆,插件以及通信协议,只是OSI规范中物理层的一个标准,RS-485总线采用差分平衡传输方式.由于RS ...

  3. CISP/CISA 每日一题 19

    CISSP 每日一题(答)What determines how often an audit should be performed? Risk     What policy requires u ...

  4. JdbcTemplate简单介绍

    转自:http://www.php.cn/java-article-368819.html 一.关于JdbcTemplate JdbcTemplate是最基本的Spring JDBC模板,这个模板支持 ...

  5. 1.2 Use Cases中 Website Activity Tracking官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Website Activity Tracking 网站活动追踪 The origi ...

  6. 常用的Windows命令

    常用的Windows命令 explorer-------打开资源管理器 logoff---------注销命令 shutdown-------关机命令 lusrmgr.msc----本机用户和组 se ...

  7. python3 打印九九乘法表

    打印九九乘法表 # !/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan for i in range(1, 10): fo ...

  8. 搭建聊天机器人Bot Framework

    Bot Framework 搭建聊天机器人 这周我来跟大家分享的是在Microsoft Build 2016上发布的微软聊天机器人的框架. 现如今,各种人工智能充斥在我们的生活里.最典型的人工智能产品 ...

  9. 【hdu 6208】The Dominator of Strings

    [链接]h在这里写链接 [题意] 问你n个串里面有没有一个串,使得其余n-1个串都是他的子串. [题解] 后缀数组. 答案肯定是那个最长的串. 则,把那个串求一下Sa数组(注意仅仅那个最长的串求). ...

  10. 利用动态图层实现数据的实时显示(arcEngine IDynamiclayer)

    marine 原文利用动态图层实现数据的实时显示(arcEngine IDynamiclayer) 说明:最近一个项目用到这方面知识,文章主要来至网络,后期会加入自己的开发心得.(以下的代码实例中,地 ...