我正在尝试使用数组作为参数调用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
以便它可以使用一个数组参数调用该方法?
答案 0 :(得分:2)
假设Invoke
尝试动态调用委托,您应该能够将输入数组包装在另一个
private void Invoke(Action<Control[]> act, Control[] elements)
{
act.DynamicInvoke(new object[] { elements });
}
此问题是由数组协方差引起的,因为您可以执行
Control[] elements = ...
object[] arr = elements;
所以输入Control[]
可以直接传递给Invoke
,这会导致每个数组元素分别传递给方法。