参数计数与Invoke不匹配?

时间:2010-09-15 21:04:05

标签: c# winforms parameters delegates invoke

下面的代码块导致错误:用户代码未处理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],
                }
            );
        }
    }

有什么想法吗?

2 个答案:

答案 0 :(得分:26)

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

这是一个修复:

Invoke(new Action<string[]>(AddListViewItem), new object[] {Data});

(或)

Invoke(new Action<string[]>(AddListViewItem), (object)Data);

这使Invoke清楚地表明目标方法采用参数。

答案 1 :(得分:0)

更新信息:

如果您使用的是 Windows Server 2008 R2 ,请查看 .Net Framework 4.5.1 的Windows更新,了解基于Windows Server 2008 R2 x64的系统KB2858725 即可。对我来说,安装此更新后修复了这个问题。