C#中类型Type有个GetMethod方法,调用该方法可获取指定方法名的方法信息实例。
使用时,其参数一般为2个,一个是方法名称字符串(可设置条件忽略大小写),另外一个参数为搜索方法的条件枚举。
该方法返回的是MethodInfo类型的实例,获取到了这个实例之后,我们就可以调用并执行该方法了。
MethodInfo method = type.GetMethod( funcName , BindingFlags.IgnoreCase | BindingFlags.Static | BindingFlags.Public );
这里要注意,搜索条件枚举,即第2个参数,要包含BindingFlags.Public,否则会返回NULL的。
如果是静态的方法,还要设置一个条件BindingFlags.Static。
得到了MethodInfo实例后,反射执行该方法:
method.Invoke( obj, arrParam );
obj为调用方法所属的类型实例,如果调用的为静态方法,可设置为null;arrParam为方法参数数组。
通过method.Invoke执行实例:
protected void btnExecute_Click(object sender, EventArgs e)
{
try
{
var Job_CleanLogDataType = _Job_HermesEDMSubscripton.GetType();
string paramsText = this.txtParam.Text;
ThreadPool.QueueUserWorkItem((_) =>
{
var methodInfo = Job_CleanLogDataType.GetMethod("OnStart", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
methodInfo.Invoke(_Job_HermesEDMSubscripton, new object[] { paramsText });
});
this.lblMsg.Text = "执行OnStart完成";
}
catch (Exception ex)
{
this.lblMsg.Text = ex.ToString();
}
}