我想通过委托调用某些方法,但得到了VerificationException。我使用了以下代码:
internal delegate void Delegete_add_Startup(object o, StartupEventHandler s);
Delegete_add_Startup del;
public App()
{
//this.Startup += this.Application_Startup;
Type[] parameterTypes = new Type[2];
parameterTypes[0] = typeof(object);
parameterTypes[1] = typeof(StartupEventHandler);
MethodInfo mi = typeof(Application).GetMethod("add_Startup", BindingFlags.Public | BindingFlags.Instance);
DynamicMethod method = new DynamicMethod(string.Empty, mi.ReturnType, parameterTypes);
method.InitLocals = true;
ILGenerator iLGenerator = method.GetILGenerator();
iLGenerator.Emit(OpCodes.Ldarg_0);
iLGenerator.Emit(OpCodes.Ldarg_1);
iLGenerator.Emit(OpCodes.Call, mi);
iLGenerator.Emit(OpCodes.Ret);
del = (Delegete_add_Startup)method.CreateDelegate(typeof(Delegete_add_Startup));
del(this, new StartupEventHandler(Application_Startup));
this.Exit += this.Application_Exit;
this.UnhandledException += this.Application_UnhandledException;
InitializeComponent();
}基本上,我是想打电话给
this.Startup += this.Application_Startup;
通过使用上述代码的委托。
这给出了一个VerificationException:操作可能会破坏运行时异常的稳定性。
通过将此代码放入一个全新的Silverlight应用程序项目的App构造函数中,可以非常容易地重现此代码。我做错了什么?
发布于 2011-06-15 20:38:16
对于你的情况,你可以用OpCodes.CallVirt代替OpCodes.Call,它应该工作得更好(未经测试和理解,我是Silverlight CLR subtleties的新手)。
https://stackoverflow.com/questions/5658513
复制相似问题