参数计数与Invoke不匹配?

soo*_*ise 14 c# parameters delegates invoke winforms

下面的代码块导致错误:用户代码未处理TargetParameterCountException.参数计数不匹配.

    public void AddListViewItem(string[] Data)
    {
        if (InvokeRequired)
        {
            Invoke(new Action<string[]>(AddListViewItem), Data);
        }
        else
        {
            ListViewData.Items.Add(Data[0]).SubItems.AddRange
            (
                new string[]
                { 
                    Data[1],
                    Data[2],
                    Data[3],
                }
            );
        }
    }
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ani*_*Ani 26

由于数组协方差而发生错误; 一个字符串数组可分配给object[].这会导致该Invoke方法将string数组的每个元素视为该AddListViewItem方法的参数.

这是一个修复:

Invoke(new Action<string[]>(AddListViewItem), new object[] {Data});
Run Code Online (Sandbox Code Playgroud)

(要么)

Invoke(new Action<string[]>(AddListViewItem), (object)Data);
Run Code Online (Sandbox Code Playgroud)

这使得Invoke目标方法采用单个参数非常清楚.