c# 反射事件
被反射类中:
public delegate void CompeletedHandler();
public static event CompeletedHandler AnalysisCompeleted;
static void BasePath_AnalysisCompeleted()
{
if (AnalysisCompeleted != null)
AnalysisCompeleted();
}
反射时用的类中:
namespace notam
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public static void SS()
{
//return null;
}
}
}
public static object InvokeClassMethod(string className,string methodName,object[] parameters,Type type)
{
object objClass =Cores.ClassBuilder.CreateObject(className);
Type tt = objClass.GetType();
System.Reflection.MethodInfo mi = tt.GetMethod(methodName);
System.Reflection.EventInfo ee = tt.GetEvent("AnalysisCompeleted");
ee.AddEventHandler(objClass, Delegate.CreateDelegate(ee.EventHandlerType,type, "SS"));
parameters = new object[] { parameters };
return mi.Invoke(objClass, parameters);
}
/// <summary>
/// 根据类名创建对象。
/// </summary>
/// <param name="className"></param>
/// <returns></returns>
public static object CreateObject(string className)
{
object instance = null; string[] s = className.Split(',');
if (s.Length >= )
{
string filename = s[];
if (filename.IndexOf(':') < ) //不包括路径
{
if (AppDomain.CurrentDomain.SetupInformation.ApplicationBase.EndsWith(@"\"))
filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + s[];
else
filename = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\" + s[];
}
if (File.Exists(filename))
{
Assembly asm = Assembly.LoadFrom(filename);
instance = asm.CreateInstance(s[]); }
else
{
throw new InvalidDataException("配置文件中,FBFactory配置不正确,找不到动态库文件:" + filename + " !");
}
}
else
{
//instance = Assembly.GetExecutingAssembly().CreateInstance(className);
instance = Assembly.LoadFrom(className).CreateInstance("FineMap.FinemapMain");
if (instance == null)
{
instance = Assembly.GetCallingAssembly().CreateInstance(className);
}
if (instance == null)
{
IEnumerator ie = AppDomain.CurrentDomain.GetAssemblies().GetEnumerator();
while (ie.MoveNext())
{
Assembly ab = ie.Current as Assembly;
if (ab != null)
{
instance = ab.CreateInstance(className);
if (instance != null)
break;
}
}
}
} return instance;
}
c# 反射事件的更多相关文章
- C# 关于反射事件
在frmMain类中的代码 private void StartRun(string tag, string date, bool tipType) { var d ...
- 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 ...
随机推荐
- 处理 input 上传图片,浏览器读取图片大小过程中遇到到的坑(兼容IE8\9)
为了 解决这个坑~ 已经 累傻了.. 周末再 写吧..
- jquery-easyui 树的使用笔记
通常还是使用jquery-ui, 它是完全免费的, jquery-easyui可以使用 freeware edition. 但easyui还不是完全免费的: 它是基于jquery, 但是第三方开发的, ...
- ASP.NET Core--条件处理程序中的依赖注入
翻译如下: 在配置期间(使用依赖注入),授权处理程序必须在服务集合中注册. 假设您有一个在授权处理程序中要解析规则的仓储库,并且该仓储库已在服务集合中注册. 授权将在构造函数还原并注入. 例如,如果你 ...
- EasyUI创建异步树形菜单和动态添加标签页tab
创建异步树形菜单 创建树形菜单的ul标签 <ul class="easyui-tree" id="treeMenu"> </ul> 写j ...
- SpringMVC中遇到的Http400 Bad Request 总结
在搭建SpringMVC环境,在使用中遇到了多次Bad Request的连接,下面来总结下. 1.参数类型不对,如后台实体类的属性为int,但传来的参数为字符串 2.因为我的粗心,本来是要通过Ajax ...
- OpenCV 2.4.13 编译使用(VS2015下)
OpenCV2.4.13编译(VS2015) 这里给出已经编译好的的下载路径.包括Win64的debug和release版本. OpenCV for MSVC14 Win64 1.下载OpenCV源码 ...
- C# 文件/文件夹重命名
C# 重命名的方法是MoveTo() 官方文档地址 (https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo.moveto%28VS.8 ...
- AngularJS常用指令
一.指令 1.ng-app 定义应用程序的根元素 <div ng-app="app"></div> var app = angular.module('ap ...
- ios 消息通知
苹果的通知分为本地通知和远程通知,这里主要说的是远程通知 历史介绍 iOS 3 - 引入推送通知UIApplication 的 registerForRemoteNotificationTypes 与 ...
- excel删除重复数据
1.点击任意单元格2.选择菜单栏的数据-->删除重复项 -->自定义重复