C# 关于反射事件
在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# 关于反射事件的更多相关文章
- c# 反射事件
被反射类中: public delegate void CompeletedHandler(); public static event CompeletedHandler AnalysisCompe ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- Android 框架学习1:EventBus 3.0 的特点与如何使用
前面总结了几篇基础,在这过程中看着别人分享自定义 View.架构或者源码分析,看起来比我写的"高大上"多了,内心也有点小波动. 但是自己的水平自己清楚,基础不扎实画再多源码流程图也 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- 通过反射绑定事件_Office Visio
花了好几个小时才Try出来,记录一下: //反射获取Visio.Application,此处没有判断是否有安装Visio mVisioType = System.Type.Get ...
- C# 调用一个按钮的Click事件(利用反射)
最基本的调用方法 (1)button1.PerformClick();(2)button1_Click(null,null);(3)button_Click(null,new EventArgs()) ...
- 使用反射让Spinner选择同一选项时触发onItemSelected事件
翻看源码,Spinner判断是否触发onItemSelected,是在它的基类AdapterView里面做的: void checkSelectionChanged() { if ((mSelecte ...
- java事件响应方法汇总(容器类监听、监听器类、AbstractAction、反射)
Java图形用户界面中,处理事件时所必须的步骤是: 1.创建接受响应的组件(控件)2.实现相关事件监听接口3.注册事件源的动作监听器4.事件触发时的事件处理 相应的可以通过以下的集中方式来作出事件响应 ...
- Android自定义工具类获取按钮并绑定事件(利用暴力反射和注解)
Android中为按钮绑定事件的有几种常见方式,你可以在布局文件中为按钮设置id,然后在MainActivity中通过findViewById方法获取按钮对象实例,再通过setOnClickListe ...
随机推荐
- c3p0的经常使用配置方式
1:第一种方式很easy c3p0.driverClass=com.mysql.jdbc.Driver c3p0.jdbcUrl=jdbc:mysql://localhost:3308/databas ...
- android-铃声的设置与播放
在android系统中,不同铃声存放的铃声路径: /system/media/audio/ringtones 来电铃声 /system/media/audio/notifications 短信通知铃声 ...
- 前端面试题(HTML/CSS)
(前端面试题大全,持续更新) 常用的块级元素和行内元素有哪些?说说他们的特点? 浮动产生的原因?清除浮动? 说说一下盒模型 float和position一起用是什么效果 rem用过吗?做不同手机的适配 ...
- [置顶]
WebService学习总结(1)——WebService相关概念
一.序言 大家或多或少都听过 WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成 分.但是不得不承认的是W ...
- 洛谷 P1178 到天宫做客
P1178 到天宫做客 题目描述 有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒.我犹豫了.天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我 ...
- [Vue + TS] Write a Vue Component as a Class in TypeScript
Starter app: https://github.com/alexjoverm/Vue-Typescript-Starter Writing Vue components as plain ob ...
- [Angular] Progress HTTP Events with 'HttpRequest'
New use case that is supported by the HTTP client is Progress events. To receive these events, we cr ...
- (转)Oracle EXP-00091解决方法
转自:http://blog.csdn.net/dracotianlong/article/details/8270136 EXP-: 正在导出有问题的统计信息. . . 正在导出表 WF_GENER ...
- 如何使用 PyCharm 将代码上传到远程服务器上(详细图解)
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 一丶测试说明 1.通过Windows电脑上的PyCharm,将代码上传到虚拟机Ubuntu系统中 需要在虚拟机中安装Ubuntu的 ...
- [WASM] Compile C Code into WebAssembly
We use the C language instead of pure WAST to create a square root function using WASM Fiddle (https ...