麻烦与params和调用处理程序

时间:2014-02-21 10:18:09

标签: c# invoke params

我正在尝试使用数组作为参数调用Invoke 问题是Invoke使用params - 如果我的数组是3个元素长,Invoke尝试调用方法,使用3个参数而不是调用方法使用一个ARRAY参数:

private void something(Control[] dataDropControls) {
   // ...
   this.Invoke(new Action<Control[]>(initControls), dataDropControls);
}

private void initControls(Control[] controls) {
    // ...
}

This question没有回答我的问题,因为参数数组是在调用函数中构建的。我的情况是,函数获取已经构建的数组。)

问:如何调用Invoke以便它可以使用一个数组参数调用该方法?

1 个答案:

答案 0 :(得分:2)

假设Invoke尝试动态调用委托,您应该能够将输入数组包装在另一个

private void Invoke(Action<Control[]> act, Control[] elements)
{
    act.DynamicInvoke(new object[] { elements });
}

此问题是由数组协方差引起的,因为您可以执行

Control[] elements = ...
object[] arr = elements;

所以输入Control[]可以直接传递给Invoke,这会导致每个数组元素分别传递给方法。