调用Type.InvokeMember()时出现MissingMethodException经常是由于缺少必要的BindingFlags引起的。
在关于Type.InvokeMember
Method的地方有一大段例子代码。这段代码中有一个片断是“//Call an instance
method”,其中BindingFlags用的是BindingFlags.Public |
BindingFlags.InvokeMethod,即:form1.GetType().InvokeMember( "ShowDialog ",
BindingFlags.Public | BindingFlags.InvokeMethod, null, form1,
null);
而事实上,如果当调用Form.ShowDialog()时只使用这两个flag,程序就会报一个你们所看到的Exception。但是如果再加上
BindingFlags.Instance,问题就马上解决了:form1.GetType().InvokeMember( "ShowDialog
", BindingFlags.Public | BindingFlags.InvokeMethod |
BindingFlags.Instance , null, form1, null);