大致情况是这样,我在一个DLL定义了一个方法A,A的参数为一个参数数组;
然后使用反射调用其中的方法A,并且传递一个object数组到方法A。
结果出现如下错误:
================================================================================
未处理 System.Reflection.TargetParameterCountException
Message="参数计数不匹配。"
Source="mscorlib"
StackTrace:
在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
在 System.Delegate.DynamicInvokeImpl(Object[] args)
================================================================================
这样如果你直接把接收到的参数数组postedParams直接传递给invoke方法的话,就会产生标题所述的错误;
后来查阅MSDN,这个帖子让我茅塞顿开
应该这样理解:Invoke方法的参数当中有一个自己的object[],正好你传递的参数也是object[],这样的话invoke就会把你参数数组里面的第一个参数作为参数传递给你要调用的方法,于是就报错了。
解决问题的如下:
/// <summary>
/// 更新接收端
/// </summary>
private void updateReceive(MyMsgEventArgs e)
{ //看是否有线程在使用该控件
if (InvokeRequired)
{
this.rtbReceive.BeginInvoke(new UpdateReceiveEditCallback(updateRtbReceiveConts), new object[] { e });
}
else
{
//创建该控件的主线程直接更新
updateRtbReceiveConts(e);
}
}