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 ...
随机推荐
- 为什么为 const 变量重新赋值不是个静态错误
const 和 let 的唯一区别就是用 const 声明的变量不能被重新赋值(只读变量),比如像下面这样就会报错: const foo = 1 foo = 2 // TypeError: Assig ...
- VTK初学一,动画加AVI录制终于做出来了
#ifndef INITIAL_OPENGL #define INITIAL_OPENGL #include <vtkAutoInit.h> VTK_MODULE_INIT(vtkRe ...
- MySQL提示:The server quit without updating PID file问题的解决办法(转载)
MySQL提示:The server quit without updating PID file问题的解决办法 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写 ...
- 【SCOI2005】 最大子矩阵 BZOJ 1084
Description 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. Input 第一行为n,m,k(1≤n≤100,1≤m≤2 ...
- CSS自适应布局(左右固定 中间自适应或者右侧固定 左侧自适应)
经常在工作中或者在面试中会碰到这样的问题,比如我想要个布局 右侧固定宽度 左侧自适应 或者 三列布局 左右固定 中间自适应的问题. 下面我们分别来学习下,当然我也是总结下而已,有如以下方法: 一: 右 ...
- android studio--百度定位集成001
安卓现在的大趋势已经是普遍使用androidstudio(安装包[https://yunpan.cn/ckc54idj3JVJb 访问密码 664f])了.这个是集成的一个好的环境. 今天来搞个百度 ...
- quartz集群报错but has failed to stop it. This is very likely to create a memory leak.
quartz集群报错but has failed to stop it. This is very likely to create a memory leak. 在一台配置1核2G内存的阿里云服务器 ...
- Angular2 架构
1. 说明 Angular 2 是一个用 HTML 和 JavaScript (或者可以编译成JavaScript)来构建应用程序的框架.该框架包含了一系列的库. 在 Angular 里,我们这样 ...
- 让EF飞一会儿:如何用Entity Framework 6 连接Sqlite数据库
获取Sqlite 1.可以用NuGet程序包来获取,它也会自动下载EF6 2.在Sqlite官网上下载对应的版本:http://system.data.sqlite.org/index.html/do ...
- yii中的cookie的发送和读取
cookies: //新创建的cookie会从本地传到服务器上,然后从服务器获取. (1) cookie的发送 $cookies = Yii::$app->response->cookie ...