我需要一点帮助!
我在运行时创建自定义控件,反序列化包含信息的 xml。我的自定义控件有两个属性,一个是事件的名称,第二个是事件引发时要执行的代码(即方法体)。
我提取两个变量中的值。我需要的是在运行时为执行存储在变量中的代码的事件添加和处理程序到我的控件。
string eventName = "Click";
string codeToRun= "MessageBox.Show(\"Hello!\");"
Type tControl = result.GetType();
EventInfo ev = tControl.GetEvent(eventName);
Type tDelegate = ev.EventHandlerType;
MethodInfo addHandler = ev.GetAddMethod();
Type returnType = tDelegate.GetMethod("Invoke").ReturnType;
ParameterInfo[] parameters = tDelegate.GetMethod("Invoke").GetParameters();
Type[] typeParameters = new Type[parameters.Length];
for (int i = 0; i < parameters.Length; i++)
{
typeParameters[i] = parameters[i].ParameterType;
}
DynamicMethod handler = new DynamicMethod(
"",
null,
typeParameters);
//here I need to compile and add my custom source code stored in codeToRun
Delegate dEmitted = handler.CreateDelegate(tDelegate);
addHandler.Invoke(result, new Object[] { dEmitted });
有什么建议么?预先感谢您的帮助!