약간의 도움이 필요합니다!바디 소스 코드가 변수에 저장되는 컨트롤에 런타임에 이벤트 처리기를 추가하십시오.
런타임에 사용자 정의 컨트롤을 만들고 정보가 들어있는 xml을 deserialize하고 있습니다. 내 사용자 지정 컨트롤에는 두 가지 속성이 있습니다. 하나는 이벤트 이름, 다른 하나는 이벤트 발생시 실행할 코드 (즉, 메서드 본문)입니다.
나는 두 변수에서 값을 추출합니다. 필요한 것은 런타임에 변수에 저장된 코드를 실행하는 이벤트에 대한 컨트롤을 추가하고 처리하는 것입니다.
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 });
의견이 있으십니까? 도움을 주셔서 감사합니다.
좋아, 나는 당신의 제안에 따라 간단하게 만들었습니다. 하지만 이제는 질문을합니다. 실행하려는 코드 (예 : codeToRun에 저장되어있는 코드)를 대리인 본문에 어떻게 추가 할 수 있습니까? CSharpCodeProvider의 도움으로? 나는 그것을하는 예제를 찾지 못했습니다. – kikka